簡體   English   中英

任務 <class> 調用非異步方法

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

  1. 什么是實現這一目標的正確方法?
    我需要等待SomeDLL SyncMethod返回,這就是我使用ContinueWith的原因。

  2. 程序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.

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