簡體   English   中英

在非異步方法中調用異步方法

[英]calling an async method inside a non-async method

我有一個我要繼承的類,並且我沒有訪問基類的權限。 我正在重寫該基類的方法,並且該方法不是異步的,但是我需要它來調用我創建的異步方法。 像這樣:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM