在非异步方法中调用异步方法

Phi*_*hil 2 c# async-await

我有一个继承自的类,但我无法访问基类。我正在覆盖该基类的一个方法,该方法不是异步的,但我需要它来调用我创建的异步方法。像这样:

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

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

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

或者还有什么我可以完全对重写的函数做的事情来使它异步?如果我尝试使用重写的方法:

public async override Task<bool> TestMethod()...
Run Code Online (Sandbox Code Playgroud)

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

Ehs*_*jad 6

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
}
Run Code Online (Sandbox Code Playgroud)

  • 这没有任何成效;它正在做 OP 已经在做的事情,但在这个过程中浪费了一大堆额外的资源。 (7认同)