Laden...

Wozu hat ThreadPool.QueueUserWorkItem ein return value?

Erstellt von chavez vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.750 Views
C
chavez Themenstarter:in
252 Beiträge seit 2007
vor 13 Jahren
Wozu hat ThreadPool.QueueUserWorkItem ein return value?

Ich habe mich gerade gefragt wozu es bei ThreadPool.QueueUserWorkItem ein return value gibt.
Im Fehlerfall wird ja soweiso ne Exception geworfen. Somit kann die Methode doch gleich void sein. Welchen Sinn hat hier der return value?

1.552 Beiträge seit 2010
vor 13 Jahren

hallo chavez:

true, wenn die Methode erfolgreich in die Warteschlange gestellt wurde. NotSupportedException wird ausgelöst, wenn die Arbeitsaufgabe nicht in die Warteschlange gestellt werden konnte.

Da dies der MSDN Kommentar ist wundert micht dies auch. Anscheinden wir nie false zurückgegeben.
Anfängliche Überlegung eines Überbleibsels aus .NET 1 Zeiten wurden dadurch zunichte gemacht da diese Methode erst seit 3.5 SP1 verfügbar ist.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

1.346 Beiträge seit 2008
vor 13 Jahren

Ich habe mir mal den Code im Reflector angesehen. Es gibt nur eine Stelle, wo es false geben könnte, und zwar nach dem Aufruf von

[SecurityCritical, SuppressUnmanagedCodeSecurity, DllImport("QCall", CharSet=CharSet.Unicode)]
internal static extern bool AdjustThreadsInPool(uint QueueLength);

Was diese aber macht, weiß ich jetzt nicht. Das werfen einer NotSupported habe ich nicht gefunden. 🤔

309 Beiträge seit 2008
vor 13 Jahren

Ja, ist ein Überbleibsel aus 1.Xer Zeiten, "damals" hat die Methode keine Exception geworfen, sondern false zurückgegeben.

Siehe MSDN zu der 1.1er Version der Methode: ThreadPool.QueueUserWorkItem-Methode (WaitCallback) (Framework 1.1)

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}