gpt4 book ai didi

c# - 同步调用异步方法

转载 作者:IT王子 更新时间:2023-10-29 03:29:24 25 4
gpt4 key购买 nike

我有一个异步方法:

public async Task<string> GenerateCodeAsync()
{
string code = await GenerateCodeService.GenerateCodeAsync();
return code;
}

我需要从一个同步方法调用这个方法。

我怎样才能做到这一点而不必复制 GenerateCodeAsync 方法以使其同步工作?

更新

目前还没有找到合理的解决方案。

但是,我看到 HttpClient 已经实现了这个模式

using (HttpClient client = new HttpClient())
{
// async
HttpResponseMessage responseAsync = await client.GetAsync(url);

// sync
HttpResponseMessage responseSync = client.GetAsync(url).Result;
}

最佳答案

您可以访问任务的 Result 属性,这将导致您的线程阻塞,直到结果可用:

string code = GenerateCodeAsync().Result;

注意:在某些情况下,这可能会导致死锁:您对 Result 的调用会阻塞主线程,从而阻止异步代码的其余部分执行。您可以选择以下选项来确保不会发生这种情况:

并不意味着您应该在所有异步调用之后无意识地添加.ConfigureAwait(false)!有关为什么以及何时应该使用 .ConfigureAwait(false) 的详分割析,请参阅以下博客文章:

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

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