同时调用异步调用会导致错误
本文关键字:调用 错误 异步 | 更新日期: 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