PageAsyncTask 클래스

정의

페이지에 등록된 비동기 작업에 대한 정보를 포함합니다. 이 클래스는 상속될 수 없습니다.

public ref class PageAsyncTask sealed
public sealed class PageAsyncTask
type PageAsyncTask = class
Public NotInheritable Class PageAsyncTask
상속
PageAsyncTask

예제

다음 코드 예제에서는 페이지에 세 개의 비동기 작업을 등록하고 병렬로 실행합니다. 각 태스크는 스레드를 5초 동안 절전 모드로 만드는 메서드를 호출합니다.

<%@ Page Language="C#" Async="true" AsyncTimeout="35"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    
  protected void Page_Load(object sender, EventArgs e)
  {
      
    // Define the asynchronuous task.
    Samples.AspNet.CS.Controls.SlowTask slowTask1 =    
      new Samples.AspNet.CS.Controls.SlowTask();
    Samples.AspNet.CS.Controls.SlowTask slowTask2 =
    new Samples.AspNet.CS.Controls.SlowTask();
    Samples.AspNet.CS.Controls.SlowTask slowTask3 =
    new Samples.AspNet.CS.Controls.SlowTask();
    
    // <Snippet3> 
    PageAsyncTask asyncTask1 = new PageAsyncTask(slowTask1.OnBegin, slowTask1.OnEnd, slowTask1.OnTimeout, "Async1", true);
    PageAsyncTask asyncTask2 = new PageAsyncTask(slowTask2.OnBegin, slowTask2.OnEnd, slowTask2.OnTimeout, "Async2", true);
    PageAsyncTask asyncTask3 = new PageAsyncTask(slowTask3.OnBegin, slowTask3.OnEnd, slowTask3.OnTimeout, "Async3", true);

    // Register the asynchronous task.
    Page.RegisterAsyncTask(asyncTask1);
    Page.RegisterAsyncTask(asyncTask2);
    Page.RegisterAsyncTask(asyncTask3);
    // </Snippet3>
      
    // Execute the register asynchronous task.
    Page.ExecuteRegisteredAsyncTasks();

    TaskMessage.InnerHtml = slowTask1.GetAsyncTaskProgress()+ "<br />" + slowTask2.GetAsyncTaskProgress() + "<br />" + slowTask3.GetAsyncTaskProgress();

  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Asynchronous Task Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <span id="TaskMessage" runat="server">
      </span>
    </div>
    </form>
</body>
</html>
<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
      
        ' Define the asynchronuous task.
        Dim slowTask1 As New Samples.AspNet.VB.Controls.SlowTask()
        Dim slowTask2 As New Samples.AspNet.VB.Controls.SlowTask()
        Dim slowTask3 As New Samples.AspNet.VB.Controls.SlowTask()
     
        ' <Snippet3>
        Dim asyncTask1 As New PageAsyncTask(AddressOf slowTask1.OnBegin, AddressOf slowTask1.OnEnd, AddressOf slowTask1.OnTimeout, "Async1", True)
        Dim asyncTask2 As New PageAsyncTask(AddressOf slowTask2.OnBegin, AddressOf slowTask2.OnEnd, AddressOf slowTask2.OnTimeout, "Async2", True)
        Dim asyncTask3 As New PageAsyncTask(AddressOf slowTask3.OnBegin, AddressOf slowTask3.OnEnd, AddressOf slowTask3.OnTimeout, "Async3", True)

        ' Register the asynchronous task.
        Page.RegisterAsyncTask(asyncTask1)
        Page.RegisterAsyncTask(asyncTask2)
        Page.RegisterAsyncTask(asyncTask3)
        ' </Snippet3>
      
        ' Execute the register asynchronous task.
        Page.ExecuteRegisteredAsyncTasks()

        TaskMessage.InnerHtml = slowTask1.GetAsyncTaskProgress() + "<br />" + slowTask2.GetAsyncTaskProgress() + "<br />" + slowTask3.GetAsyncTaskProgress()

    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <span id="TaskMessage" runat="server">
      </span>
    </div>
    </form>
</body>
</html>
using System;
using System.Web;
using System.Web.UI;
using System.Threading;

namespace Samples.AspNet.CS.Controls
{
    public class SlowTask
    {
        private String _taskprogress;
        private AsyncTaskDelegate _dlgt;

        // Create delegate.
        protected delegate void AsyncTaskDelegate();

        public String GetAsyncTaskProgress()
        {
            return _taskprogress;
        }
        public void ExecuteAsyncTask()
        {
            // Introduce an artificial delay to simulate a delayed 
            // asynchronous task.
            Thread.Sleep(TimeSpan.FromSeconds(5.0));
        }

        // Define the method that will get called to
        // start the asynchronous task.
        public IAsyncResult OnBegin(object sender, EventArgs e,
            AsyncCallback cb, object extraData)
        {
            _taskprogress = "AsyncTask started at: " + DateTime.Now + ". ";

            _dlgt = new AsyncTaskDelegate(ExecuteAsyncTask);
            IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);

            return result;
        }

        // Define the method that will get called when
        // the asynchronous task is ended.
        public void OnEnd(IAsyncResult ar)
        {
            _taskprogress += "AsyncTask completed at: " + DateTime.Now;
            _dlgt.EndInvoke(ar);
        }

        // Define the method that will get called if the task
        // is not completed within the asynchronous timeout interval.
        public void OnTimeout(IAsyncResult ar)
        {
            _taskprogress += "AsyncTask failed to complete " +
                "because it exceeded the AsyncTimeout parameter.";
        }
    }
}
Imports System.Threading

Namespace Samples.AspNet.VB.Controls

    Public Class SlowTask
        Private _taskprogress As String
        Private _dlgt As AsyncTaskDelegate

        ' Create delegate.
        Protected Delegate Sub AsyncTaskDelegate()

        Public Function GetAsyncTaskProgress() As String
            Return _taskprogress
        End Function

        Public Sub ExecuteAsyncTask()
            ' Introduce an artificial delay to simulate a delayed 
            ' asynchronous task.
            Thread.Sleep(TimeSpan.FromSeconds(5.0))
        End Sub

        ' Define the method that will get called to
        ' start the asynchronous task.
        Public Function OnBegin(ByVal sender As Object, ByVal e As EventArgs, ByVal cb As AsyncCallback, ByVal extraData As Object) As IAsyncResult
            _taskprogress = "AsyncTask started at: " + DateTime.Now.ToString + ". "

            _dlgt = New AsyncTaskDelegate(AddressOf ExecuteAsyncTask)
            Dim result As IAsyncResult = _dlgt.BeginInvoke(cb, extraData)

            Return result
        End Function

        ' Define the method that will get called when
        ' the asynchronous task is ended.
        Public Sub OnEnd(ByVal ar As IAsyncResult)
            _taskprogress += "AsyncTask completed at: " + DateTime.Now.ToString
            _dlgt.EndInvoke(ar)
        End Sub


        ' Define the method that will get called if the task
        ' is not completed within the asynchronous timeout interval.
        Public Sub OnTimeout(ByVal ar As IAsyncResult)
            _taskprogress += "AsyncTask failed to complete " + _
                "because it exceeded the AsyncTimeout parameter."
        End Sub
    End Class
End Namespace

설명

ASP.NET 버전 2.0을 사용하면 페이지를 렌더링하기 전에 여러 작업을 페이지에 등록하고 비동기적으로 실행할 수 있습니다. 작업이 느린 프로세스이고 다른 프로세스가 실행되는 동안 연결되지 않도록 하려면 작업을 비동기적으로 실행하도록 지정할 수 있습니다. 비동기 작업은 병렬 또는 순차적으로 실행할 수 있습니다.

메서드를 PageAsyncTask 통해 RegisterAsyncTask 개체를 페이지에 등록해야 합니다. 비동기 작업을 실행하기 위해 페이지 자체를 비동기적으로 처리할 필요가 없습니다. 특성을 true (다음 코드 예제와 같이) 또는 false 페이지 지시문으로 설정할 Async 수 있으며 비동기 작업은 여전히 비동기적으로 처리됩니다.

<%@ Page Async="true" %>

특성이 로 Async 설정 false되면 모든 비동기 작업이 완료될 때까지 페이지를 실행하는 스레드가 차단됩니다.

이벤트 전에 PreRenderComplete 등록된 비동기 작업은 아직 실행되지 않은 경우 페이지에서 자동으로 실행됩니다. 이벤트 이후에 등록된 비동기 작업은 메서드를 PreRenderComplete 통해 ExecuteRegisteredAsyncTasks 명시적으로 실행되어야 합니다. 메서드를 ExecuteRegisteredAsyncTasks 사용하여 이벤트 전에 PreRenderComplete 작업을 시작할 수도 있습니다. 메서드는 ExecuteRegisteredAsyncTasks 실행되지 않은 페이지에서 등록된 모든 비동기 작업을 실행합니다.

기본적으로 비동기 작업은 45초 이내에 완료되지 않은 경우 시간이 초과됩니다. Web.config 파일 또는 페이지 지시문에서 다른 제한 시간 값을 지정할 수 있습니다. Web.config 파일의 섹션에는 <pages> 아래와 같이 특성이 포함되어 asyncTimeout 있습니다.

<system.web>

<pages asyncTimeout="30">

</pages>

</system.web>

페이지 지시문에 특성이 AsyncTimeout 포함되어 있습니다.

<%@ Page AsyncTimeout="30" %>

생성자

PageAsyncTask(BeginEventHandler, EndEventHandler, EndEventHandler, Object)

병렬로 실행하기 위한 기본값을 사용하여 PageAsyncTask 클래스의 새 인스턴스를 초기화합니다.

PageAsyncTask(BeginEventHandler, EndEventHandler, EndEventHandler, Object, Boolean)

병렬로 실행하기 위해 지정된 값을 사용하여 PageAsyncTask 클래스의 새 인스턴스를 초기화합니다.

PageAsyncTask(Func<CancellationToken,Task>)

작업을 취소할 수 있는 이벤트 처리기를 사용하여 PageAsyncTask 클래스의 새 인스턴스를 초기화합니다.

PageAsyncTask(Func<Task>)

작업을 처리할 수 있는 이벤트 처리기를 사용하여 PageAsyncTask 클래스의 새 인스턴스를 초기화합니다.

속성

BeginHandler

비동기 작업을 시작할 때 호출할 메서드를 가져옵니다.

EndHandler

제한 시간 안에 작업이 성공적으로 완료되면 호출할 메서드를 가져옵니다.

ExecuteInParallel

작업을 다른 작업과 병렬로 처리할 수 있는지 여부를 나타내는 값을 가져옵니다.

State

작업의 상태를 나타내는 개체를 가져옵니다.

TimeoutHandler

제한 시간 안에 작업이 성공적으로 완료되지 않으면 호출할 메서드를 가져옵니다.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상