gpt4 book ai didi

c# - 在非异步方法中调用异步方法

转载 作者:行者123 更新时间:2023-11-30 20:38:03 25 4
gpt4 key购买 nike

我有一个继承自的类,但我无权访问基类。我重写了那个基类的一个方法,这个方法不是异步的,但我需要它来调用我创建的异步方法。像这样:

public class OverridingClass : BaseClass
{
public override bool TestMethod()
{
var res = engine.DoAsyncFunction().Result;
//do stuff with res value
}
}

是使用这种方法更好,我取出“结果”值,还是我应该向引擎添加一个新的同步方法并完全忽略它的异步函数,就像这样?

public class OverridingClass : BaseClass
{
public override bool TestMethod()
{
var res = engine.DoFunction();
//do stuff with res value
}
}

或者我可以完全对覆盖的函数做些什么来使其异步?如果我尝试重写方法:

public async override Task<bool> TestMethod()...

然后我会得到一个编译错误,指出该方法与基本签名不匹配。

最佳答案

如果您希望它被异步调用,您可以将其包装在 Task.Run() 中,如下所示:

public override bool TestMethod()
{
var task = Task.Run(async () => {

return await engine.DoAsyncFunction();

});

var Result = task.Result; // use returned result from async method here
}

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

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