Сначала у меня есть пример ожидания потока, и он отлично работает. Его задача - попросить 100 потоков подождать 3 секунды и затем сделать вывод:
for (int i = 0; i < 100; ++i)
{
int index = i;
Thread t = new Thread(() =>
{
Caller c = new Caller();
c.DoWaitCall();
}) { IsBackground = true };
t.Start();
}
Звонящий :: DoWaitCall () выглядит так:
public void DoWaitCall()
{
Thread.Sleep(3000);
Console.WriteLine("done");
}
В этом случае все потоки ждут 3 секунды и выдают выводимое сообщение почти одновременно.
Но когда я пытаюсь использовать асинхронный обратный вызов для создания Console.WriteLine:
public void DoWaitCall()
{
MyDel del = () => { Thread.Sleep(3000); };
del.BeginInvoke(CallBack, del);
}
private void CallBack(IAsyncResult r)
{
Console.WriteLine("done");
}
Каждый поток ожидает различное время и медленно выводит их один за другим.
Есть ли хороший способ для параллельного асинхронного обратного вызова?