簡體   English   中英

無需等待就調用異步方法

[英]Call async method without await

我致力於Windows Phone 8+應用程序的圖像加載器庫,當然它支持磁盤上的緩存。

因此,我需要異步將圖像保存在磁盤上,而無需等待結果:

// Async saving to the storage cache without await
// ReSharper disable once CSharpWarnings::CS4014
Config.StorageCacheImpl.SaveAsync(imageUrl, downloadResult.ResultStream)
    .ContinueWith(
        task => 
        {
            if (task.IsFaulted || !task.Result)
            {
                Log("[error] failed to save in storage: " + imageUri);
            }
        }
);

如您所見, SaveAsync()是一種異步方法,它返回Task<bool> ,如果保存了圖像,則bool結果為true。

問題是編譯器顯示警告,因為我沒有在等待async方法的結果,但是, 我不需要等待它 ,我需要在調用SaveAsync()之后,盡快將下載的圖像返回給用戶代碼。 SaveAsync()我返回下載的圖片。

因此, 我將圖像異步地緩存到IsolatedStorageFile中 ,而且,這無關緊要,是否緩存,因為如果沒有,JetImageLoader將會再次加載它。

是否可以禁用此警告?

PS,如果您想查看JetImageLoader源碼,我可以給您一個指向GitHub的鏈接。

出現編譯器警告是因為這樣做幾乎總是一個錯誤。 一方面,您不會收到有關任務已完成的任何通知,也不會收到有關錯誤的通知。

為了避免編譯器警告,您可以將其分配給未使用的局部變量,如下所示:

var _ = Config.StorageCacheImpl.SaveAsync...

對於您的情況,我還建議您使用輔助方法而不是ContinueWith來使代碼更簡潔:

private static async Task SaveAsync(string imageUrl, Stream resultStream)
{
  bool success = false;
  try
  {
    success = await Config.StorageCacheImpl.SaveAsync(imageUrl, downloadResult.ResultStream);
  }
  finally
  {
    if (!success)
      Log("[error] failed to save in storage: " + imageUri);
  }
}

暫無
暫無

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

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