我编写了一个使用BeginInvoke
调用异步方法的小应用程序。
// Asynchronous delegate
Func<int, MailItemResult> method = SendMail;
// Select some records from the database to populate col
while (i < col.Count)
{
method.BeginInvoke(i, SendMailCompleted, method);
i++;
}
Console.ReadLine();
这是在控制台应用程序的Main()
方法中。 MailItemResult
定义为:
class MailItemResult
{
public int CollectionIndex { get; set; }
public bool Success { get; set; }
public DateTime DateUpdated { get; set; }
}
美好而简单。回调方法定义如下:
static void SendMailCompleted(IAsyncResult result)
{
var target = (Func<int, MailItemResult>)result.AsyncState;
MailItemResult mir = target.EndInvoke(result);
if (mir.Success)
{
// Update the record in the database
}
}
此应用程序针对前100个线程运行,然后在数据库中引发死锁。现在,我理解死锁,但是我在这个小应用程序中无法理解的是哪个线程是被调用的回调方法(SendMailCompleted
)?这是从主应用程序线程调用的吗?或者它是否使用BeginInvoke
方法正在使用的线程池中的相同线程?