【问题标题】:Concurrency C#, Task<T> vs TaskCompletionSource并发 C#,Task<T> 与 TaskCompletionSource
【发布时间】:2020-03-01 16:40:49
【问题描述】:

这两个代码示例之间有什么不同吗?他们似乎工作相同。 示例 1:

Task<int> task = Task.Run(() =>      
            {
                Console.WriteLine("Foo");
                Thread.Sleep(6000);
                return 2137;
            });
Console.WriteLine("something...");
Thread.Sleep(3000);
Console.WriteLine("something again...");
Console.WriteLine(task.Result);
Console.WriteLine("nothing");

示例 2:

new Thread(() =>
            {
                Console.WriteLine("Foo");
                Thread.Sleep(6000);
                tcs.SetResult(2137);
            })
{ IsBackground = true }.Start();
Console.WriteLine("something...");
Thread.Sleep(3000);
Task<int> task = tcs.Task;
Console.WriteLine("something again...");
Console.WriteLine(task.Result);
Console.WriteLine("nothing");

【问题讨论】:

    标签: c# .net concurrency


    【解决方案1】:

    是的,它们都在不同的线程上运行代码,但执行代码的位置会有所不同:

    Task.Run

    将指定的工作排入队列以在thread pool 上运行,并为函数返回的任务返回一个代理。

    new Thread(...).Start():

    线程设置为ThreadState.Running。线程通常由操作系统调度以立即执行(在 ThreadPool 之外)。 IsBackground = true 属性意味着线程不会阻止进程终止,即使它正在执行中。

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多