[英]Task<class> calling a non async method
我有一個第三方DLL,我無法改變,我想使其異步方法之一。
所以我有:
procedure bool Food()
{
Task<ReturnClass> response = SomeDLL.SyncMethod(); // Method returns "ReturnClass"
response.ContinueWith (_ =>
{
return response.Result != null;
});
}
我得到已知的編譯錯誤:
無法將類型'SomeDLL.ReturnClass'隱式轉換為'System.Threading.Tasks.Task'
重要的是要注意我無法更改第三方DLL
什么是實現這一目標的正確方法?
我需要等待SomeDLL SyncMethod返回,這就是我使用ContinueWith的原因。
程序bool Foo是否需要設置為“async”?
你說你想讓方法異步,但你沒有說明原因。 如果您希望獲得異步的可擴展性改進,那么這是不可能的: SyncMethod()
將阻塞一個線程,你無能為力。
如果您在UI應用程序中並希望獲得更好的響應能力,那么您可以通過使用Task.Run()
在后台線程上調用您的方法來Task.Run()
。 就像是:
async Task<bool> FoodAsync()
{
Task<ReturnClass> response = Task.Run(() => SomeDLL.SyncMethod());
return await response != null;
}
這假設您使用的是C#5。如果不是這樣,您仍然可以這樣做,但代碼會更復雜:
Task<bool> FoodAsync()
{
Task<ReturnClass> response =
Task.Factory.StartNew(() => SomeDLL.SyncMethod());
return response.ContinueWith(_ => response.Result != null);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.