Tasks are not Threads - The Brain Dump用了一个非常简单直观的例子说明了task和thread并不是一回事(尽管你调用Task.Run一般会在线程池上启一个线程帮你做些事情)。

假设有个UI,我们有2个按钮,开始和结束。代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
private async void bttnStart_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Looking for the time");
    DateTime now = await GetCurrentTimeAsync();
    MessageBox.Show("It is now" + now.ToString());
}

private void bttnEnd_Click(object sender, RoutedEventArgs e)
{
    if (_tsc != null)
    {
        _tsc.SetResult(DateTime.Now);
    }
}

TaskCompletionSource<DateTime> _tsc;

private Task<DateTime> GetCurrentTimeAsync()
{
    _tsc = new TaskCompletionSource<DateTime>();
    return _tsc.Task;
}

从上面的代码我们可以看到,这个task的开始于用户点击“开始”按钮,介绍于用户点击“结束”按钮。task其实在等用户的操作,同样的,task也可以在等网络,内存或者任何别的东西,不一定是线程。

相关文章:

  • 2022-12-23
  • 2021-08-09
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-11
猜你喜欢
  • 2022-12-23
  • 2022-02-10
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-12
相关资源
相似解决方案