1

我正在为 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()是 async 方法,它返回Task<bool>bool如果保存图像,则结果为 true。

问题是编译器显示警告,因为我没有等待异步方法的结果,但是,我不需要等待它,我需要尽快将下载的图像返回给用户代码,在调用SaveAsync()我返回之后下载的图像。

所以我将图像异步缓存到 IsolatedStorageFile,而且——不管它是否被缓存,因为如果没有——JetImageLoader 将再次加载它。

是否可以禁用此警告?

PS 如果你想查看 JetImageLoader 的源代码,我可以给你一个 GitHub 的链接。

4

1 回答 1

8

编译器警告在那里,因为这样做几乎总是一个错误。一方面,您不会收到任务完成的任何通知,也不会收到错误通知。

为避免编译器警告,您可以将其分配给未使用的局部变量,如下所示:

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);
  }
}
于 2013-08-06T12:12:21.543 回答