지 않을 업데이트할 수 있 UI 후 작업 완료에 나 ASP.NET 응용 프로그램

0

질문

나는 실행하는 오래 실행되는 기능을 배경으로 작업에서 나 asp.net 응용 프로그램. 하기 전에 작업이 완료된 메인 스레드가 종료(저는 그것을 원하는 방식으로,이를 사용하면 기다리고 있는 키워드고 main 스레드에까지 기다리고 작업이 완료되면,나는 프록시 오류 메시지

프록시의 오류
프록시 서버에서 잘못된 응답을 받았 업스트림 서버로부터 작업 배경이 너무 길

하지만 일단 후 작업 완료에도 나는 페이지를 새로 고침하여 리다이렉션하는 동일한 페이지 또는 어느 나는 할 수 있을 재정의합니다. 방법은 없을 업데이트 UI 후 main 스레드가 완료되면 실행합니다.

내 코드는 다음과 같이 간다:

protected void btnImport_Click(object sender, EventArgs e)
{
        var task = ImportThread();

        if (task.IsCompleted)
        {
            DisplaySuccess("Import success");
        }
        else
            DisplayError("Import failed");
}

private async Task<bool> ImportThread()
{
        try
        {
            var success = await Task<bool>.Run(() => new Manager().Import().ConfigureAwait(false);

            if (task.IsCompleted)
            {
                DisplaySuccess("Import success");
            }
            else 
            {
                DisplayError("Import failed");
            }
    
            return true;
}

위 async 작업을 기다립니다 아래의 방법에서 존재하는 다른 클래스입니다.

public bool Import()
{
    // some operations here
    return true;
}

이 메소드가 완료되어 반환하는 ImportThread() 하지만 작성된 코드가 있을 무시지 업데이트 UI. 를 업데이트해야 합 UI 의 상태를 가져옵니다. 고도서 ImportThread 지로 돌아가 버튼을 클릭하 이벤트 방법도.

제발 도와주세요 어떤 방법을 업데이트 UI 의 상태를 가져옵니다.

참고:용 Redirect.ResponseImportThread() 페이지를 새로 고침하지만,작동 하지 않았

asp.net async-await background-task c#
2021-11-23 19:55:22
2

최고의 응답

1

문제를 파악하고 아래에서 스탠드 웹 페이지 수명주기 여기입니다.

이 있는 경우 웹 페이지에 앉아 있는 사용자 데스크탑:

enter image description here

지금 말하는 사용자가 버튼을 클릭.

당신은 지금 this:

 var task = ImportThread();

    if (task.IsCompleted)

Ok,so 웹 페이지에 서버입니다. 에 넣을 수 있습니다 심지어 비동기 기다리고 있을 때까지 소들을 집에 와서,하지만 당신은 여전히 있다:

enter image description here

그래서 오랫동안 당신의 코드를 실행,또는 대기,웹 페이지입니다 여전히 붙어 서버 사이드에서 작동합니다. 까지만 코드를 완료하고 종료 페이지 아래로 여행을하는 클라이언트 측.

다시: 귀하의 뒤에 코드를 막을 수가 없,그리고 기다릴 수 없을 위해 뭔가를 끝내기 때문 않는 경우,다음 페이지를 유지할 때까지는 서버에서 처리가 완료됩니다.

다음 및 다음 웹페이지가 여행을 다시 클라이언트 측. 이때 발생합니다;

enter image description here

다음 서버 측의 페이지를 던지는 메모리 및 모든 클래스 변수이 파괴되!!! 웹 서버가 기다리고 있는 모든 사용자를 게시 돌아 페이지에 대한 처리까지!!

그래서 실행해야 하는 경우에는 몇 가지 종류의 오래 실행되는 프로세스?

당신은 몇 가지를 선택:

post 페이지의 코드를 실행 뒤에 코드를 시작하는 새로운 실 웹 페이지를 만드는 여행을 다시 클라이언트 측. 그 시점에서 필요 타이머의 일부 유형 웹 방화(ajax)를 조사하거나 물을 경우 서버 오래 실행되는 프로세스 수행합니다. 고 이후 ajax 를 호출이 없을 사용의 모든 웹 컨트롤하는 페이지나 페이지의 클래스의 변수(기억,후 웹 페이지 아래로 여행을 다시 클라이언트 측 웹 페이지 않는 기존 웹 서버 측에서는 메모리,으며 모든 클래스의 변수를 기존). 그래서,또 다시,이것은 확실히 매우 의미 몇 가지 종류의 타이머,또는 언급했듯이,타이머+코드를 호출하는 일부 ajax 방법입니다. 그리고 긴 프로세스를 실행하는 것을 가능성이 매우 높 사용하여 세션()지 않기 때문에 사용하도록 ViewState.

고 필요한 필요가 사용하는 ajax 를 호출합니다. 당신이 사용할 수 있는 간단한 자바 스크립트는 클라이언트 측의 일상적인 타이머는 버튼을 클릭하는 모든 1 개 또는 2 초의 코드를 실행하고,그것은 다음의 상태를 얻을 수있는 오래 실행되는 프로세스(아마도 다시 세션에서),및 그 후 업데이트로 표시됩니다. 그리고 당신은 또한 포함할 수 있습니다드 타이머를 중지 상태가 변경되었을"done"또는 어떤 것이다.

그래서 코드를 뒤지지 않고지 않을 것"업데이트"웹 페이지입니다. 당신이 하나 라운드 여행의 코드를 실행해야 합니다 fast,완료해야 실행할 수 없을 사용하더라도 기다리고 있는 명령 때문에,다음 페이지 stll 입 대기,그리고 여전히 붙어 서버에 있습니다.

는 경우에 당신은 넘어 가고 싶은 간단한 타이머 트릭 접근 방식-는 자주 사용합니까?

다음을 채택할 필요가 소개하는 귀하의 웹 사이트로 뭔가를 위해 설계된 이 유형의 케이스

고맙게도,이 signalR 이러한 목적을 위해,그는 의심 할 여지없이 최선의 선택 및 접근,당신을 위해 설계되어 있기 때문에 정확하게 질문하고 시나리오이다.

SignalR

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr#:~:text=What%20is%20SignalR%3F%20ASP.NET%20SignalR%20is%20a%20library,process%20of%20adding%20real-time%20web%20functionality%20to%20applications.

2021-11-23 21:28:35
0

하려는 경우 비동기적으로 사용자에게 알려 줍(의 완성 또는 실패의 아무것도 같은 작업으로),사용할 수 있는 웹에 푸시 알림(중포 기지를 사용하여 메시징 클라우드)또는 SignalR 소켓이 있습니다. 를 사용하면 백그라운드 작업을 잃 main 스레드와 불행하게도 없는 방법에 대응하는 관련 사용자.

2021-11-23 20:31:11

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................