TPL中的task并不是thread By Dawei XU Published Jul 8 2013 Contents Tasks are not Threads - The Brain Dump用了一个非常简单直观的例子说明了task和thread并不是一回事(尽管你调用Task.Run一般会在线程池上启一个线程帮你做些事情)。 假设有个UI,我们有2个按钮,开始和结束。代码如下: 12345678910111213141516171819202122private 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也可以在等网络,内存或者任何别的东西,不一定是线程。