Bagikan melalui


PageAsyncTask Kelas

Definisi

Berisi informasi tentang tugas asinkron yang didaftarkan ke halaman. Kelas ini tidak dapat diwariskan.

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

Contoh

Contoh kode berikut mendaftarkan tiga tugas asinkron ke halaman dan menjalankannya secara paralel. Setiap tugas memanggil metode yang hanya menyebabkan utas tidur selama 5 detik.

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

Keterangan

ASP.NET versi 2.0 memungkinkan Anda mendaftarkan beberapa tugas ke halaman dan menjalankannya secara asinkron sebelum merender halaman. Anda mungkin menentukan bahwa tugas dijalankan secara asinkron jika prosesnya lambat dan Anda tidak ingin proses lain diikat saat dijalankan. Tugas asinkron dapat dijalankan secara paralel atau berurutan.

Objek PageAsyncTask harus didaftarkan ke halaman melalui RegisterAsyncTask metode . Halaman itu sendiri tidak harus diproses secara asinkron untuk menjalankan tugas asinkron. Anda dapat mengatur Async atribut ke ( true seperti yang ditunjukkan dalam contoh kode berikut) atau false pada direktif halaman dan tugas asinkron masih akan diproses secara asinkron:

<%@ Page Async="true" %>

Async Ketika atribut diatur ke false, utas yang menjalankan halaman akan diblokir hingga semua tugas asinkron selesai.

Setiap tugas asinkron yang didaftarkan sebelum PreRenderComplete peristiwa akan dijalankan secara otomatis oleh halaman jika belum dijalankan. Tugas asinkron yang didaftarkan setelah PreRenderComplete peristiwa harus dijalankan secara eksplisit melalui ExecuteRegisteredAsyncTasks metode . Metode ini ExecuteRegisteredAsyncTasks juga dapat digunakan untuk memulai tugas sebelum PreRenderComplete peristiwa. Metode ini ExecuteRegisteredAsyncTasks menjalankan semua tugas asinkron terdaftar pada halaman yang belum dijalankan.

Secara default, tugas asinkron akan kehabisan waktu jika belum selesai dalam waktu 45 detik. Anda dapat menentukan nilai batas waktu yang berbeda dalam file Web.config atau direktif halaman. Bagian <pages> file Web.config berisi atribut, seperti yang asyncTimeout ditunjukkan di bawah ini.

<system.web>

<pages asyncTimeout="30">

</pages>

</system.web>

Direktif halaman berisi AsyncTimeout atribut .

<%@ Page AsyncTimeout="30" %>

Konstruktor

PageAsyncTask(BeginEventHandler, EndEventHandler, EndEventHandler, Object)

Menginisialisasi instans PageAsyncTask baru kelas menggunakan nilai default untuk dieksekusi secara paralel.

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

Menginisialisasi instans PageAsyncTask baru kelas menggunakan nilai yang ditentukan untuk dieksekusi secara paralel.

PageAsyncTask(Func<CancellationToken,Task>)

Menginisialisasi instans PageAsyncTask baru kelas menggunakan penanganan aktivitas yang memungkinkan tugas dibatalkan.

PageAsyncTask(Func<Task>)

Menginisialisasi instans PageAsyncTask baru kelas menggunakan penanganan aktivitas yang memungkinkan tugas ditangani.

Properti

BeginHandler

Mendapatkan metode untuk memanggil saat memulai tugas asinkron.

EndHandler

Mendapatkan metode untuk memanggil ketika tugas berhasil diselesaikan dalam periode waktu habis.

ExecuteInParallel

Mendapatkan nilai yang menunjukkan apakah tugas dapat diproses secara paralel dengan tugas lain.

State

Mendapatkan objek yang mewakili status tugas.

TimeoutHandler

Mendapatkan metode untuk memanggil ketika tugas tidak berhasil diselesaikan dalam periode waktu habis.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk