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

时间:2016-02-16 19:41:31

标签: c# async-await

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

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

最好使用这个方法,我取出'result'值,或者我应该向引擎添加一个新的同步方法而不是完全忽略它的异步函数,就像这样?

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

还是还有其他东西可以完全覆盖被覆盖的函数以使其异步?如果我尝试制作被覆盖的方法:

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

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

1 个答案:

答案 0 :(得分:4)

如果你想让它被异步调用,你可以将它包装在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
}