TaskFactory<TResult> Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyediakan dukungan untuk membuat dan menjadwalkan Task<TResult> objek.
generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)
Jenis parameter
- TResult
Nilai yang dikembalikan dari Task<TResult> objek yang dibuat oleh metode kelas ini.
- Warisan
-
TaskFactory<TResult>
Contoh
Contoh berikut menggunakan properti statis Factory untuk melakukan dua panggilan ke TaskFactory<TResult>.StartNew metode . Tugas pertama mengembalikan array string yang diisi dengan nama file di direktori MyDocuments pengguna, sementara yang kedua mengembalikan array string yang diisi dengan nama subdirektori direktori MyDocuments pengguna. Kemudian memanggil TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) metode , yang menampilkan informasi tentang jumlah file dan direktori dalam array yang dikembalikan oleh dua tugas setelah mereka menyelesaikan eksekusi.
using System;
using System.IO;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task<string[]>[] tasks = new Task<string[]>[2];
String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
tasks[0] = Task<string[]>.Factory.StartNew( () => Directory.GetFiles(docsDirectory));
tasks[1] = Task<string[]>.Factory.StartNew( () => Directory.GetDirectories(docsDirectory));
Task.Factory.ContinueWhenAll(tasks, completedTasks => {
Console.WriteLine("{0} contains: ", docsDirectory);
Console.WriteLine(" {0} subdirectories", tasks[1].Result.Length);
Console.WriteLine(" {0} files", tasks[0].Result.Length);
} );
}
}
// The example displays output like the following:
// C:\Users\<username>\Documents contains:
// 24 subdirectories
// 16 files
Imports System.IO
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks(1) As Task(Of String())
Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
tasks(0) = Task(Of String()).Factory.StartNew( Function()Directory.GetFiles(docsDirectory) )
'' End Sub )
tasks(1) = Task(Of String()).Factory.StartNew( Function() Directory.GetDirectories(docsDirectory) )
'' End Sub )
Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
Console.WriteLine("{0} contains: ", docsDirectory)
Console.WriteLine(" {0} subdirectories", tasks(1).Result.Length)
Console.WriteLine(" {0} files", tasks(0).Result.Length)
End Sub)
End Sub
End Module
' The example displays output like the following:
' C:\Users\<username>\Documents contains:
' 24 subdirectories
' 16 files
Keterangan
.NET menyediakan dua pabrik untuk membuat dan menjadwalkan tugas:
Kelas TaskFactory , yang membuat Task objek dan Task<TResult> .
Kelas TaskFactory<TResult> , yang membuat Task<TResult> objek .
Kelas ini TaskFactory<TResult> memungkinkan Anda untuk melakukan hal berikut:
Buat tugas dan segera mulai dengan memanggil StartNew metode . Anda dapat memanggil kelebihan beban metode ini untuk membuat dan menjalankan tugas yang memerlukan argumen non-default.
Peringatan
Dimulai dengan .NET Framework 4.5, Task.Run metode ini menyediakan cara term mudah untuk membuat tugas dengan nilai konfigurasi default dan segera memulainya.
Buat tugas yang dimulai ketika salah satu tugas dalam array telah selesai dengan memanggil ContinueWhenAny metode atau ContinueWhenAny .
Buat tugas yang dimulai ketika semua tugas dalam array telah selesai dengan memanggil ContinueWhenAll metode atau ContinueWhenAll .
Properti statis Task<TResult>.Factory mengembalikan objek default TaskFactory<TResult> . Anda juga dapat memanggil salah TaskFactory<TResult> satu konstruktor kelas untuk mengonfigurasi Task<TResult> objek yang TaskFactory<TResult> dibuat kelas. Contoh berikut mengonfigurasi objek baru TaskFactory<TResult> untuk membuat tugas yang memiliki token pembatalan tertentu, opsi pembuatan tugas, opsi kelanjutan, dan penjadwal tugas yang dikustomisasi.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
static CancellationTokenSource cts = new CancellationTokenSource();
static TaskFactory<int> factory = new TaskFactory<int>(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
new CustomScheduler());
static void Main()
{
var t2 = factory.StartNew(() => DoWork());
cts.Dispose();
}
static int DoWork()
{
/*...*/
return DateTime.Now.Hour <= 12 ? 1 : 2;
}
}
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim cts As New CancellationTokenSource()
Dim factory As New TaskFactory(Of Integer)(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
New CustomScheduler())
Dim t2 = factory.StartNew(Function() DoWork())
cts.Dispose()
End Sub
Function DoWork() As Integer
Return If(Date.Now.Hour <= 12, 1, 2)
End Function
End Module
Dalam kebanyakan kasus, Anda tidak perlu membuat instans baru TaskFactory<TResult> . Sebagai gantinya, Anda dapat menggunakan properti statis Task<TResult>.Factory , yang mengembalikan objek pabrik yang menggunakan nilai default. Anda kemudian dapat memanggil metodenya untuk memulai tugas baru atau menentukan kelanjutan tugas. Untuk ilustrasi, lihat contohnya.
Konstruktor
TaskFactory<TResult>() |
Menginisialisasi instans TaskFactory<TResult> dengan konfigurasi default. |
TaskFactory<TResult>(CancellationToken) |
Menginisialisasi instans TaskFactory<TResult> dengan konfigurasi default. |
TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler) |
Menginisialisasi instans TaskFactory<TResult> dengan konfigurasi yang ditentukan. |
TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions) |
Menginisialisasi instans TaskFactory<TResult> dengan konfigurasi yang ditentukan. |
TaskFactory<TResult>(TaskScheduler) |
Menginisialisasi instans TaskFactory<TResult> dengan konfigurasi yang ditentukan. |
Properti
CancellationToken |
Mendapatkan token pembatalan default untuk pabrik tugas ini. |
ContinuationOptions |
TaskContinuationOptions Mendapatkan nilai enumerasi untuk pabrik tugas ini. |
CreationOptions |
TaskCreationOptions Mendapatkan nilai enumerasi untuk pabrik tugas ini. |
Scheduler |
Mendapatkan penjadwal tugas untuk pabrik tugas ini. |
Metode
Berlaku untuk
Keamanan Thread
Semua anggota publik dan terlindungi aman dari TaskFactory<TResult> utas dan dapat digunakan secara bersamaan dari beberapa utas.