Task<TResult> 构造函数
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
初始化新的 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)参数
- 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。
例外
创建了 cancellationToken 的 CancellationTokenSource 已经被释放。
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)参数
- state
- Object
一个表示将由此函数使用的数据的对象。
- cancellationToken
- CancellationToken
将指派给此新任务的 CancellationToken。
例外
创建了 cancellationToken 的 CancellationTokenSource 已经被释放。
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)参数
- 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。
例外
创建了 cancellationToken 的 CancellationTokenSource 已经被释放。
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)参数
- state
- Object
一个表示将由此函数使用的数据的对象。
- cancellationToken
- CancellationToken
将指派给此新任务的 CancellationToken。
- creationOptions
- TaskCreationOptions
用于自定义任务的行为的 TaskCreationOptions。
例外
创建了 cancellationToken 的 CancellationTokenSource 已经被释放。
creationOptions 参数为 TaskCreationOptions 指定无效值。
function 参数为 null。
function 参数为 null。
注解
与调用此构造函数相比,实例化 Task<TResult> 对象和启动任务的最常用方法是调用静态 TaskFactory<TResult>.StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler) 方法。 此构造函数提供的唯一优势是,它允许对象实例化与任务调用分开。