PageAsyncTask PageAsyncTask PageAsyncTask PageAsyncTask Class

定義

ページに登録されている非同期タスクに関する情報を格納します。Contains information about an asynchronous task registered to a page. このクラスは継承できません。This class cannot be inherited.

public ref class PageAsyncTask sealed
public sealed class PageAsyncTask
type PageAsyncTask = class
Public NotInheritable Class PageAsyncTask
継承
PageAsyncTaskPageAsyncTaskPageAsyncTaskPageAsyncTask

次のコード例では、3つの非同期タスクをページに登録し、それらを並行して実行します。The following code example registers three asynchronous tasks to a page and executes them in parallel. 各タスクは、5秒間だけスレッドをスリープ状態にするメソッドを呼び出します。Each task calls a method that merely causes the thread to sleep for 5 seconds.

<%@ 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 では、ページを表示する前に、複数のタスクをページに登録し、非同期的に実行することができます。ASP.NET version 2.0 allows you to register multiple tasks to a page and run them asynchronously prior to rendering the page. 処理速度が遅いプロセスで、実行中に他のプロセスが関連付けられないようにする必要がある場合は、タスクを非同期に実行するように指定できます。You might specify that a task be run asynchronously if it is a slow process and you do not want other processes to be tied up while it is executing. 非同期タスクは、並列または順次で実行できます。The asynchronous tasks can be executed in parallel or sequentially.

オブジェクトPageAsyncTaskは、 RegisterAsyncTaskメソッドを使用してページに登録する必要があります。A PageAsyncTask object must be registered to the page through the RegisterAsyncTask method. 非同期タスクを実行するために、ページ自体を非同期的に処理する必要はありません。The page itself does not have to be processed asynchronously to execute asynchronous tasks. Async属性をtrue (次のコード例に示すように) またはfalse page ディレクティブに設定すると、非同期タスクは引き続き非同期に処理されます。You can set the Async attribute to either true (as shown in the following code example) or false on the page directive and the asynchronous tasks will still be processed asynchronously:

<%@ Page Async="true" %>

属性がにfalse設定されている場合、ページを実行するスレッドは、すべての非同期タスクが完了するまでブロックされます。 AsyncWhen the Async attribute is set to false, the thread that executes the page will be blocked until all asynchronous tasks are complete.

イベントのPreRenderComplete前に登録された非同期タスクは、まだ実行されていない場合、ページによって自動的に実行されます。Any asynchronous tasks registered before the PreRenderComplete event will be executed automatically by the page if they have not already been executed. イベントのPreRenderComplete後に登録された非同期タスクは、メソッドExecuteRegisteredAsyncTasksを使用して明示的に実行する必要があります。Those asynchronous tasks registered after the PreRenderComplete event must be executed explicitly through the ExecuteRegisteredAsyncTasks method. メソッドを使用して、イベントのPreRenderComplete前にタスクを開始することもできます。 ExecuteRegisteredAsyncTasksThe ExecuteRegisteredAsyncTasks method can also be used to start tasks before the PreRenderComplete event. メソッドExecuteRegisteredAsyncTasksは、実行されていないページに対して、登録されているすべての非同期タスクを実行します。The ExecuteRegisteredAsyncTasks method executes all the registered asynchronous tasks on the page that have not been executed.

既定では、非同期タスクが45秒以内に完了しなかった場合、タイムアウトします。By default, an asynchronous task will time out if it has not completed within 45 seconds. Web.config ファイルまたは page ディレクティブで、異なるタイムアウト値を指定できます。You can specify a different time-out value in either the Web.config file or the page directive. Web.config ファイルのasyncTimeout セクションには、次に示すように、属性が含まれ<pages>ています。The <pages> section of the Web.config file contains an asyncTimeout attribute, as shown below.

<system.web>

<pages asyncTimeout="30">

</pages>

</system.web>

Page ディレクティブには、 AsyncTimeout属性が含まれています。The page directive contains an AsyncTimeout attribute.

<%@ Page AsyncTimeout="30" %>

コンストラクター

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

並列実行のために既定値を使用して、PageAsyncTask クラスの新しいインスタンスを初期化します。Initializes a new instance of the PageAsyncTask class using the default value for executing in parallel.

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

並列実行のために指定した値を使用して、PageAsyncTask クラスの新しいインスタンスを初期化します。Initializes a new instance of the PageAsyncTask class using the specified value for executing in parallel.

PageAsyncTask(Func<CancellationToken,Task>) PageAsyncTask(Func<CancellationToken,Task>) PageAsyncTask(Func<CancellationToken,Task>) PageAsyncTask(Func<CancellationToken,Task>)

タスクを取り消すことができるようにするイベント ハンドラーを使用して、PageAsyncTask クラスの新しいインスタンスを初期化します。Initializes a new instance of the PageAsyncTask class using an event handler that enables the task to be canceled.

PageAsyncTask(Func<Task>) PageAsyncTask(Func<Task>) PageAsyncTask(Func<Task>) PageAsyncTask(Func<Task>)

タスクを処理できるようにするイベント ハンドラーを使用して、PageAsyncTask クラスの新しいインスタンスを初期化します。Initializes a new instance of the PageAsyncTask class using an event handler that enables the task to be handled.

プロパティ

BeginHandler BeginHandler BeginHandler BeginHandler

非同期タスクの開始時に呼び出すメソッドを取得します。Gets the method to call when beginning an asynchronous task.

EndHandler EndHandler EndHandler EndHandler

タイムアウト期限内にタスクが正常に完了したときに呼び出すメソッドを取得します。Gets the method to call when the task completes successfully within the time-out period.

ExecuteInParallel ExecuteInParallel ExecuteInParallel ExecuteInParallel

このタスクを他のタスクと並列で処理できるかどうかを示す値を取得します。Gets a value that indicates whether the task can be processed in parallel with other tasks.

State State State State

タスクの状態を表すオブジェクトを取得します。Gets an object that represents the state of the task.

TimeoutHandler TimeoutHandler TimeoutHandler TimeoutHandler

タイムアウト期限内にタスクが正常に完了しなかったときに呼び出すメソッドを取得します。Gets the method to call when the task does not complete successfully within the time-out period.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象