我的异步函数何时完成

本文关键字:何时完 函数 异步 我的 | 更新日期: 2023-09-27 18:29:18

我已经编码了一个C#void async函数,该函数采用以下参数:

  1. string url
  2. Bitmap对象

然后,该函数从文件缓存、内存缓存中检索url,或者异步地从网站下载url。

我的问题是:如何通知我Bitmap对象何时填充了图像,以便我可以在代码中使用此Bitmap图像?

提前谢谢。

我的异步函数何时完成

没有简单的方法可以知道异步void方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务。

然后,在客户端代码中等待Task完成就很简单了。一旦Task完成,您就可以使用您的Bitmap

如果你从某个源下载位图,理想情况下应该返回Task<Bitmap>,而不是将Bitmap作为参数传递并修改它。(如果我理解错误,请忽略它)。

如果你想检查位图何时准备好,最简单的方法是将你的方法转换成这样:

async Task<bool> myMethod(myParamter) {
    //DO Something
    return true;
}

然后以以下方式调用方法

bool isReady = await myMethod(...)

在调用myMethod添加异步时,您还必须更改方法的签名

改进版:

Task<bool> pendingDownload = null;
private async void mainMethod(...) {
    if(pendingDownload != null) {
        MessageBox.Show("Image is not ready!");
        return;
    }
    try{
        pendingDownload = myMethod(...);
        bool isReady = await  pendingDownload;
        MessageBox.Show("Bitmap downloaded");
    } catch(Exception e) {
         MessageBox.Show("Error in downloading image: " + ex.Message);
    }
    pendingDownload = null;
}