[英]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.