Share via


PageAsyncTask Sınıf

Tanım

Bir sayfaya kaydedilmiş zaman uyumsuz görev hakkında bilgi içerir. Bu sınıf devralınamaz.

public ref class PageAsyncTask sealed
public sealed class PageAsyncTask
type PageAsyncTask = class
Public NotInheritable Class PageAsyncTask
Devralma
PageAsyncTask

Örnekler

Aşağıdaki kod örneği, üç zaman uyumsuz görevi bir sayfaya kaydeder ve bunları paralel olarak yürütür. Her görev yalnızca iş parçacığının 5 saniye uyku moduna neden olan bir yöntemi çağırır.

<%@ 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

Açıklamalar

ASP.NET sürüm 2.0, bir sayfaya birden çok görev kaydetmenize ve sayfayı işlemeden önce bunları zaman uyumsuz olarak çalıştırmanıza olanak tanır. Yavaş bir işlemse ve yürütülürken diğer işlemlerin bağlanmasını istemiyorsanız, görevin zaman uyumsuz olarak çalıştırılmasını belirtebilirsiniz. Zaman uyumsuz görevler paralel veya sıralı olarak yürütülebilir.

Bir PageAsyncTask nesnenin yöntemi aracılığıyla RegisterAsyncTask sayfaya kaydedilmesi gerekir. Zaman uyumsuz görevleri yürütmek için sayfanın kendisinin zaman uyumsuz olarak işlenmesi gerekmez. özniteliğini Asynctrue (aşağıdaki kod örneğinde gösterildiği gibi) veya false sayfa yönergesinde ayarlayabilirsiniz ve zaman uyumsuz görevler zaman uyumsuz olarak işlenmeye devam eder:

<%@ Page Async="true" %>

Async özniteliği olarak ayarlandığındafalse, sayfayı yürüten iş parçacığı tüm zaman uyumsuz görevler tamamlanana kadar engellenir.

Etkinlik öncesinde PreRenderComplete kaydedilen zaman uyumsuz görevler, henüz yürütülmemişse sayfa tarafından otomatik olarak yürütülür. Olaydan sonra kaydedilen zaman uyumsuz görevlerin PreRenderComplete yöntemi aracılığıyla ExecuteRegisteredAsyncTasks açıkça yürütülmesi gerekir. yöntemi, ExecuteRegisteredAsyncTasks olaydan önce PreRenderComplete görevleri başlatmak için de kullanılabilir. ExecuteRegisteredAsyncTasks yöntemi, sayfada yürütülmeyen tüm kayıtlı zaman uyumsuz görevleri yürütür.

Varsayılan olarak, zaman uyumsuz bir görev 45 saniye içinde tamamlanmazsa zaman aşımına uğrar. Web.config dosyasında veya sayfa yönergesinde farklı bir zaman aşımı değeri belirtebilirsiniz. <pages>Web.config dosyasının bölümü aşağıda gösterildiği gibi bir asyncTimeout öznitelik içerir.

<system.web>

<pages asyncTimeout="30">

</pages>

</system.web>

Page yönergesi bir AsyncTimeout öznitelik içerir.

<%@ Page AsyncTimeout="30" %>

Oluşturucular

PageAsyncTask(BeginEventHandler, EndEventHandler, EndEventHandler, Object)

Paralel yürütme için varsayılan değeri kullanarak sınıfın PageAsyncTask yeni bir örneğini başlatır.

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

Paralel olarak yürütmek için belirtilen değeri kullanarak sınıfın yeni bir örneğini PageAsyncTask başlatır.

PageAsyncTask(Func<CancellationToken,Task>)

Görevin iptal edilmesine PageAsyncTask olanak tanıyan bir olay işleyicisi kullanarak sınıfının yeni bir örneğini başlatır.

PageAsyncTask(Func<Task>)

Görevin işlenmesini PageAsyncTask sağlayan bir olay işleyicisi kullanarak sınıfının yeni bir örneğini başlatır.

Özellikler

BeginHandler

Zaman uyumsuz bir göreve başlarken çağrılacak yöntemi alır.

EndHandler

Görev zaman aşımı süresi içinde başarıyla tamamlandığında çağrılacak yöntemi alır.

ExecuteInParallel

Görevin diğer görevlerle paralel olarak işlenip işlenemeyeceğini gösteren bir değer alır.

State

Görevin durumunu temsil eden bir nesne alır.

TimeoutHandler

Görev zaman aşımı süresi içinde başarıyla tamamlanmadığında çağrılacak yöntemi alır.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır