同时调用异步调用会导致错误

本文关键字:调用 错误 异步 | 更新日期: 2023-09-27 18:12:31

我有一个发送电子邮件的异步调用函数,如果函数同时被调用,我会得到错误:

控件当前正忙

我怎么能不得到这个错误和第二个调用工作?延期行吗?

public static void MyEatTaskAsync(DataRowCollection rows)
{
    MyTaskWorkerDelegate worker = new MyTaskWorkerDelegate(EmailAutomationTask.setEmailAndSend);
    AsyncCallback completedCallback = new AsyncCallback(AsyncMethods.MyTaskCompletedCallback);
    lock (AsyncMethods._sync)
    {
        if (AsyncMethods._myTaskIsRunning)
            throw new InvalidOperationException("The control is currently busy.");
        worker.BeginInvoke(rows, completedCallback, null);
        AsyncMethods._myTaskIsRunning = true;
    }
}    

同时调用异步调用会导致错误

根据我的理解,您需要在发送一批电子邮件(行内容)完成后执行一些任务("completedCallback")。"MyEatTaskAsync"的调用者可以在它还在处理的时候再次调用这个方法,这就是为什么你必须在这里实现一个锁。简单的方法是在调用者中实现一个"await",直到"MyEatTaskAsync"完成。

阅读这篇文章,了解它是如何工作的。https://msdn.microsoft.com/en-us/library/hh191443.aspx