gpt4 book ai didi

c# - 从同步方法调用异步方法

转载 作者:行者123 更新时间:2023-11-30 22:51:24 27 4
gpt4 key购买 nike

我看到很多关于从同步方法调用异步方法的问题,比如这里:How to call asynchronous method from synchronous method in C#?

我理解这些解决方案,但是,通过实验,我发现我不需要添加 .Wait()Task.Run(async () => await MyAsyncMethod( )) 让它同步运行。我有一个从数据库中提取信息的 get 方法。

我的代码在下面,当我运行时,它在 var task = GetItemAsync() 处等待,我从数据库中得到了正确的结果。我发现很难相信数据库调用会在代码继续运行之前返回,这似乎暗示它是同步运行的。我错过了什么吗?

public object GetItem()
{
var task = GetItemAsync();
var result = task.Result;

return result
}

最佳答案

调用 awaitable(method which returns Task) 方法的唯一正确方法是 await 它。但是您只能在返回Task 的方法中await。在遗留代码中,你无法更改方法签名,因为你有太多的引用,你需要基本上重构整个代码库。所以你有这些选择:

.Result
.Wait()
.GetAwaiter().GetResult()

这两个都不好。所有这些都将阻塞线程。但是,如果您不能将方法签名更改为 await 执行,我会选择最后一个选项 - GetAwaiter().GetResult() 因为它不会将异常包装到 聚合异常

关于c# - 从同步方法调用异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219469/

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