Caracho
Mitglied
Ja, schon klar. Aber das ist sicher nicht der Rückgabewert den du haben willst.
Das IAsyncResult-Objekt erhälst du ja noch vor der eigentlichen Ausführung,
also bevor im ThreadPool ein passender Thread dafür gestartet wurde.
Würdest du das IAsyncResult-Objekt erst nach der Ausführung des Threads
erhalten, dann hättest du nichts gewonnen, da du ja dann auf die Abarbeitung des Threads warten müsstest und somit der Multithreading-Vorteil weg wäre.
Das IAsyncResult-Objekt ist z.b. wichtig wenn du mit asynchronen Delegates arbeitest:
Das Beispiel macht natürlich jetzt den Multithreading Vorteil nicht deutlich,
aber es zeigt wie es gemacht werden könnte.
Das IAsyncResult-Objekt erhälst du ja noch vor der eigentlichen Ausführung,
also bevor im ThreadPool ein passender Thread dafür gestartet wurde.
Würdest du das IAsyncResult-Objekt erst nach der Ausführung des Threads
erhalten, dann hättest du nichts gewonnen, da du ja dann auf die Abarbeitung des Threads warten müsstest und somit der Multithreading-Vorteil weg wäre.
Das IAsyncResult-Objekt ist z.b. wichtig wenn du mit asynchronen Delegates arbeitest:
Code:
public delegate bool DummyDelegate(int i);
public bool Dummy(int i)
{
return 10 % i == 0;
}
public void BeginDummy(int i)
{
DummyDelegate dd = new DummyDelegate(Dummy);
dd.BeginInvoke(i, new AsyncCallback(DummyCallback), dd);
}
private void DummyCallback(IAsyncResult ar)
{
DummyDelegate dd = ar.AsyncState as DummyDelegate;
// Hier ist der "Rückgabewert"
bool ergebnis = dd.EndInvoke(ar);
MessageBox.Show(ergebnis.ToString());
}
aber es zeigt wie es gemacht werden könnte.