8
的Test_Click
下面是代码的简化版本,其运行在UI线程(与WindowsFormsSynchronizationContext):是否Task.ContinueWith捕获调用线程上下文以便继续?
void Test_Click(object sender, EventArgs e)
{
var task = DoNavigationAsync();
task.ContinueWith((t) =>
{
MessageBox.Show("Navigation done!");
}, TaskScheduler.FromCurrentSynchronizationContext());
}
我应该明确地指定TaskScheduler.FromCurrentSynchronizationContext()
以确保持续的行动将在同一UI线程上执行?还是ContinueWith
自动捕获执行上下文(因此,在这种情况下使TaskScheduler
参数冗余)?
我认为它默认情况下不会这样做(不像await
),但到目前为止我找不到在线资源来确认这一点。
谢谢,非常有道理。我也发现[this](http://www.jaylee.org/post/2012/09/29/C-Async-Tips-and-Tricks-Part-3-Tasks-and-the-Synchronization-Context .aspx),相关且非常有帮助。 – Noseratio
更容易找到与参考来源:http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs#27c5b7fbe5caaa18 这就是说,你可以请解释什么StackCrawlMark呢? – Kakira