gpt4 book ai didi

c#-5.0 - C# 5 异步如何返回主线程?

转载 作者:行者123 更新时间:2023-12-01 11:06:14 25 4
gpt4 key购买 nike

我在看一个关于 Async CTP 的视频,看到如果你从例如main thread ,则工作完成后将从主线程继续执行。

例如

//called from main thread
var result = await SomeAsyncWork();
//this will execute in main thread also
console.writeline(result)

我有一个天真的印象,即会在工作线程上执行正常的回调。

在某种程度上,这一定是正在发生的事情,因为您可以使用 Task.FromAsync 将普通的异步方法包装在 T 的任务中

但是正常的异步方法会在工作线程中运行,那么工作线程中的回调如何编码回主线程呢?

最佳答案

回调附加到任务,使用当前任务调度程序(在等待时是“当前”,在完成时不是当前)。对于 UI 线程,当前任务调度器将调度回调在 UI 线程内执行...对于线程池线程,调度器将允许它在任何线程池线程上执行,等

假设您正在等待 Task<T> , 它有效地调用了 Task<T>.ContinueWith(continuationAction, scheduler) .

你可以用正确的方法等待任何事情,但是如何BeginAwait计划延续是特定于实现的。我只提到了基于任务的,因为它可能是最常见的一种。编译器本身根本没有指定这一点——它假定库会做正确的事情。编译器所做的只是将“方法的其余部分”翻译成延续,并将其传递给 BeginAwait。 .

关于c#-5.0 - C# 5 异步如何返回主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5647150/

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