Task<TResult> 构造函数

定义

初始化新的 Task<TResult> 对象。

重载

Task<TResult>(Func<TResult>)

使用指定的函数初始化新的 Task<TResult>

Task<TResult>(Func<Object,TResult>, Object)

使用指定的函数和状态初始化新的 Task<TResult>

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

使用指定的函数初始化新的 Task<TResult>

Task<TResult>(Func<TResult>, TaskCreationOptions)

使用指定的函数和创建选项初始化新的 Task<TResult>

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

使用指定的操作、状态和选项初始化新的 Task<TResult>

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

使用指定的操作、状态和选项初始化新的 Task<TResult>

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

使用指定的函数和创建选项初始化新的 Task<TResult>

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

使用指定的操作、状态和选项初始化新的 Task<TResult>

Task<TResult>(Func<TResult>)

使用指定的函数初始化新的 Task<TResult>

public:
 Task(Func<TResult> ^ function);
public Task (Func<TResult> function);
new System.Threading.Tasks.Task<'Result> : Func<'Result> -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of TResult))

参数

function
Func<TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

例外

function 参数为 null

function 参数为 null

示例

以下示例计算表示已发布书籍的文本文件中的近似单词数。 每个任务负责打开文件、异步读取其整个内容,以及使用正则表达式计算字数计数。 调用 Task.WaitAll(Task[]) 此方法可确保在向控制台显示每本书的字数之前已完成所有任务。

对象实例化与此示例中的对象执行分离,以便示例可以确保每个文件都存在。 如果未显示,则显示缺失文件的名称。 否则,它会调用 Task.Start 该方法来启动每个任务。

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

public class Example
{
   public static async Task Main()
   {
      string pattern = @"\p{P}*\s+";
      string[] titles = { "Sister Carrie", "The Financier" };
      Task<int>[] tasks = new Task<int>[titles.Length];

      for (int ctr = 0; ctr < titles.Length; ctr++) {
         string s = titles[ctr];
         tasks[ctr] = new Task<int>( () => {
                                   // Number of words.
                                   int nWords = 0;
                                   // Create filename from title.
                                   string fn = s + ".txt";

                                   StreamReader sr = new StreamReader(fn);
                                   string input = sr.ReadToEndAsync().Result;
                                   sr.Close();
                                   nWords = Regex.Matches(input, pattern).Count;
                                   return nWords;
                                } );
      }
      // Ensure files exist before launching tasks.
      bool allExist = true;
      foreach (var title in titles) {
         string fn = title + ".txt";
         if (! File.Exists(fn)) {
            allExist = false;
            Console.WriteLine("Cannot find '{0}'", fn);
            break;
         }   
      }
      // Launch tasks 
      if (allExist) {
         foreach (var t in tasks)
            t.Start();
      
        await Task.WhenAll(tasks);
  
        Console.WriteLine("Word Counts:\n");
        for (int ctr = 0; ctr < titles.Length; ctr++)
           Console.WriteLine("{0}: {1,10:N0} words", titles[ctr], tasks[ctr].Result);
      }   
   }
}
// The example displays the following output:
//       Sister Carrie:    159,374 words
//       The Financier:    196,362 words
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim pattern As String = "\p{P}*\s+"
      Dim titles() As String = { "Sister Carrie",
                                 "The Financier" }
      Dim tasks(titles.Length - 1) As Task(Of Integer)

      For ctr As Integer = 0 To titles.Length - 1
         Dim s As String = titles(ctr)
         tasks(ctr) = New Task(Of Integer)( Function()
                                   ' Number of words.
                                   Dim nWords As Integer = 0
                                   ' Create filename from title.
                                   Dim fn As String = s + ".txt"

                                   Dim sr As New StreamReader(fn)
                                   Dim input As String = sr.ReadToEndAsync().Result
                                   sr.Close()
                                   nWords = Regex.Matches(input, pattern).Count
                                   Return nWords
                                End Function)
      Next

      ' Ensure files exist before launching tasks.
      Dim allExist As Boolean = True
      For Each title In titles
         Dim fn As String = title + ".txt"
         If Not File.Exists(fn) Then
            allExist = false
            Console.WriteLine("Cannot find '{0}'", fn)
            Exit For
         End If   
      Next
      ' Launch tasks 
      If allExist Then
         For Each t in tasks
            t.Start()
         Next
         Task.WaitAll(tasks)

         Console.WriteLine("Word Counts:")
         Console.WriteLine()
         For ctr As Integer = 0 To titles.Length - 1
         Console.WriteLine("{0}: {1,10:N0} words", titles(ctr), tasks(ctr).Result)
         Next
      End If   
   End Sub
End Module
' The example displays the following output:
'       Sister Carrie:    159,374 words
'       The Financier:    196,362 words

正则表达式模式 \p{P}*\s+ 匹配零、一个或多个标点符号字符,后跟一个或多个空格字符。 它假定匹配项总数等于近似字数。

注解

此构造函数仅应在需要创建和启动任务时分离的高级方案使用。

实例化 Task<TResult> 对象并启动任务的最常用方法是调用静态 Task.Run<TResult>(Func<TResult>)TaskFactory<TResult>.StartNew(Func<TResult>) 方法,而不是调用此构造函数。

如果不需要任何操作的任务只是让 API 的使用者有待等待的内容,则应使用 a TaskCompletionSource<TResult>

另请参阅

适用于

Task<TResult>(Func<Object,TResult>, Object)

使用指定的函数和状态初始化新的 Task<TResult>

public:
 Task(Func<System::Object ^, TResult> ^ function, System::Object ^ state);
public Task (Func<object,TResult> function, object state);
public Task (Func<object?,TResult> function, object? state);
new System.Threading.Tasks.Task<'Result> : Func<obj, 'Result> * obj -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of Object, TResult), state As Object)

参数

function
Func<Object,TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

state
Object

一个表示由该操作使用的数据的对象。

例外

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<Object,TResult>, Object) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

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

使用指定的函数初始化新的 Task<TResult>

public:
 Task(Func<TResult> ^ function, System::Threading::CancellationToken cancellationToken);
public Task (Func<TResult> function, System.Threading.CancellationToken cancellationToken);
new System.Threading.Tasks.Task<'Result> : Func<'Result> * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of TResult), cancellationToken As CancellationToken)

参数

function
Func<TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

cancellationToken
CancellationToken

将指派给此任务的 CancellationToken

例外

创建了 cancellationTokenCancellationTokenSource 已经被释放。

function 参数为 null

function 参数为 null

注解

实例化 Task<TResult> 对象并启动任务的最常用方法是调用静态 Task.Run<TResult>(Func<TResult>, CancellationToken)TaskFactory<TResult>.StartNew(Func<TResult>, CancellationToken) 方法,而不是调用此构造函数。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

Task<TResult>(Func<TResult>, TaskCreationOptions)

使用指定的函数和创建选项初始化新的 Task<TResult>

public:
 Task(Func<TResult> ^ function, System::Threading::Tasks::TaskCreationOptions creationOptions);
public Task (Func<TResult> function, System.Threading.Tasks.TaskCreationOptions creationOptions);
new System.Threading.Tasks.Task<'Result> : Func<'Result> * System.Threading.Tasks.TaskCreationOptions -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of TResult), creationOptions As TaskCreationOptions)

参数

function
Func<TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

creationOptions
TaskCreationOptions

用于自定义任务的行为的 TaskCreationOptions

例外

creationOptions 参数为 TaskCreationOptions 指定无效值。

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<TResult>, TaskCreationOptions) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

使用指定的操作、状态和选项初始化新的 Task<TResult>

public:
 Task(Func<System::Object ^, TResult> ^ function, System::Object ^ state, System::Threading::CancellationToken cancellationToken);
public Task (Func<object,TResult> function, object state, System.Threading.CancellationToken cancellationToken);
public Task (Func<object?,TResult> function, object? state, System.Threading.CancellationToken cancellationToken);
new System.Threading.Tasks.Task<'Result> : Func<obj, 'Result> * obj * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of Object, TResult), state As Object, cancellationToken As CancellationToken)

参数

function
Func<Object,TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

state
Object

一个表示将由此函数使用的数据的对象。

cancellationToken
CancellationToken

将指派给此新任务的 CancellationToken

例外

创建了 cancellationTokenCancellationTokenSource 已经被释放。

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<Object,TResult>, Object, CancellationToken) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

使用指定的操作、状态和选项初始化新的 Task<TResult>

public:
 Task(Func<System::Object ^, TResult> ^ function, System::Object ^ state, System::Threading::Tasks::TaskCreationOptions creationOptions);
public Task (Func<object,TResult> function, object state, System.Threading.Tasks.TaskCreationOptions creationOptions);
public Task (Func<object?,TResult> function, object? state, System.Threading.Tasks.TaskCreationOptions creationOptions);
new System.Threading.Tasks.Task<'Result> : Func<obj, 'Result> * obj * System.Threading.Tasks.TaskCreationOptions -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of Object, TResult), state As Object, creationOptions As TaskCreationOptions)

参数

function
Func<Object,TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

state
Object

一个表示将由此函数使用的数据的对象。

creationOptions
TaskCreationOptions

用于自定义任务的行为的 TaskCreationOptions

例外

creationOptions 参数为 TaskCreationOptions 指定无效值。

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<Object,TResult>, Object, TaskCreationOptions) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

使用指定的函数和创建选项初始化新的 Task<TResult>

public:
 Task(Func<TResult> ^ function, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskCreationOptions creationOptions);
public Task (Func<TResult> function, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);
new System.Threading.Tasks.Task<'Result> : Func<'Result> * System.Threading.CancellationToken * System.Threading.Tasks.TaskCreationOptions -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of TResult), cancellationToken As CancellationToken, creationOptions As TaskCreationOptions)

参数

function
Func<TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

cancellationToken
CancellationToken

将指派给新任务的 CancellationToken

creationOptions
TaskCreationOptions

用于自定义任务的行为的 TaskCreationOptions

例外

创建了 cancellationTokenCancellationTokenSource 已经被释放。

creationOptions 参数为 TaskCreationOptions 指定无效值。

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory.StartNew<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

使用指定的操作、状态和选项初始化新的 Task<TResult>

public:
 Task(Func<System::Object ^, TResult> ^ function, System::Object ^ state, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskCreationOptions creationOptions);
public Task (Func<object,TResult> function, object state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);
public Task (Func<object?,TResult> function, object? state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskCreationOptions creationOptions);
new System.Threading.Tasks.Task<'Result> : Func<obj, 'Result> * obj * System.Threading.CancellationToken * System.Threading.Tasks.TaskCreationOptions -> System.Threading.Tasks.Task<'Result>
Public Sub New (function As Func(Of Object, TResult), state As Object, cancellationToken As CancellationToken, creationOptions As TaskCreationOptions)

参数

function
Func<Object,TResult>

表示要在任务中执行的代码的委托。 在完成此函数后,该任务的 Result 属性将设置为返回此函数的结果值。

state
Object

一个表示将由此函数使用的数据的对象。

cancellationToken
CancellationToken

将指派给此新任务的 CancellationToken

creationOptions
TaskCreationOptions

用于自定义任务的行为的 TaskCreationOptions

例外

创建了 cancellationTokenCancellationTokenSource 已经被释放。

creationOptions 参数为 TaskCreationOptions 指定无效值。

function 参数为 null

function 参数为 null

注解

与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。

另请参阅

适用于