gpt4 book ai didi

c# - 任务类的实例(Task.Factory.StartNew 或 TaskCompletionSource)

转载 作者:太空狗 更新时间:2023-10-29 21:41:43 24 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但只是我想确保我头脑正确的问题。今天我在研究 TPL 库,发现有两种创建 Task 类实例的方法。

方法一

 Task<int> t1 = Task.Factory.StartNew(() =>
{
//Some code
return 100;

});

方式二

  TaskCompletionSource<int> task = new TaskCompletionSource<int>();
Task t2 = task.Task;
task.SetResult(100);

我只想知道

  1. 这些实例之间有什么区别吗?
  2. 如果是那么什么?

最佳答案

第二个示例没有创建“真正的”任务,即没有执行任何操作的委托(delegate)。

您主要使用它来向调用者呈现一个 Task 接口(interface)。看看上面的例子 msdn

    TaskCompletionSource<int> tcs1 = new TaskCompletionSource<int>();
Task<int> t1 = tcs1.Task;

// Start a background task that will complete tcs1.Task
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
tcs1.SetResult(15);
});

// The attempt to get the result of t1 blocks the current thread until the completion source gets signaled.
// It should be a wait of ~1000 ms.
Stopwatch sw = Stopwatch.StartNew();
int result = t1.Result;
sw.Stop();

Console.WriteLine("(ElapsedTime={0}): t1.Result={1} (expected 15) ", sw.ElapsedMilliseconds, result);

关于c# - 任务类的实例(Task.Factory.StartNew 或 TaskCompletionSource),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com