gpt4 book ai didi

c# - 我如何强制等待在同一线程上继续?

转载 作者:行者123 更新时间:2023-12-04 16:58:20 28 4
gpt4 key购买 nike

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);
});
}

这个的输出是:
running on task 1
running on task

所以我们可以看到不仅执行已经转移到另一个任务,而且还转移到了 UI 线程。我如何创建一个专用任务,并强制等待始终继续执行此任务?长时间运行的任务也不会这样做。

我见过好几个 SynchronizationContext implementations ,但到目前为止它们都没有工作,在这种情况下,因为它使用线程并且 System.Threading.Thread 不适用于 uwp。

最佳答案

so we can see that not only the execution has moved to another task, but also to the UI-thread.



不,它不在 UI 线程上。从技术上讲,它也不是一项任务。我在 Task.CurrentId in async methods 上的博客文章中解释了为什么会发生这种情况。 .

How can i create a dedicated task, and enforce await to always continue on this task? Long-running tasks don't do this either.



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

I have seen several SynchronizationContext implementations, but so far none of them worked, in this case because it uses threads and System.Threading.Thread is not available for uwp.



试用 mine .它应该适用于 UWP 10.0。

关于c# - 我如何强制等待在同一线程上继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com