我怎么能强制等待继续在同一个线程?

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.

Ste*_*ary 9

所以我们可以看到,不仅执行已经移动到另一个任务,而且还移动到UI线程.

不,它不在UI线程上.从技术上讲,这也不是一项任务.我解释为什么这发生在我的博客文章上Task.CurrentIdasync方法.

如何创建专用任务,并强制等待始终继续执行此任务?长时间运行的任务也不会这样做.

你走在正确的轨道上:你需要一个自定义SynchronizationContext(或自定义TaskScheduler).

我已经看过几个SynchronizationContext实现,但到目前为止它们都没有工作,在这种情况下因为它使用线程而System.Threading.Thread不适用于uwp.

试试我的.它应该适用于UWP 10.0.