Ben*_*nni 4 c# asynchronous synchronizationcontext task-parallel-library
await 不保证在生成任务的同一任务上继续:
private void TestButton_Click(object sender, RoutedEventArgs e)
{
Task.Run(async () =>
{
Debug.WriteLine("running on task " + Task.CurrentId);
await Task.Delay(TimeSpan.FromMilliseconds(100));
Debug.WriteLine("running on task " + Task.CurrentId);
});
}
Run Code Online (Sandbox Code Playgroud)
这个输出是:
running on task 1
running on task
Run Code Online (Sandbox Code Playgroud)
所以我们可以看到,不仅执行已经移动到另一个任务,而且还移动到UI线程.如何创建专用任务,并强制等待始终继续执行此任务?长时间运行的任务也不会这样做.
我已经看过几个SynchronizationContext实现,但到目前为止它们都没有工作,在这种情况下因为它使用线程而System.Threading.Thread不适用于uwp.
所以我们可以看到,不仅执行已经移动到另一个任务,而且还移动到UI线程.
不,它不在UI线程上.从技术上讲,这也不是一项任务.我解释为什么这发生在我的博客文章上Task.CurrentId的async方法.
如何创建专用任务,并强制等待始终继续执行此任务?长时间运行的任务也不会这样做.
你走在正确的轨道上:你需要一个自定义SynchronizationContext(或自定义TaskScheduler).
我已经看过几个SynchronizationContext实现,但到目前为止它们都没有工作,在这种情况下因为它使用线程而System.Threading.Thread不适用于uwp.
试试我的.它应该适用于UWP 10.0.