2009-12-22 10 views

risposta

7

Hai visto questo:

Titolo "coroutine di esecuzione per NET avvolgendo l'API non gestiti Fiber"
nel numero di settembre 2003 del MSDN Magazine

http://msdn.microsoft.com/en-us/magazine/cc164086.aspx

+0

Non ho che uno sguardo veloce abbastanza interessante. – dkackman

+0

Articolo interessante, se non aggiornato (utilizzando VS 2003 style Managed C++). –

+12

E si prega di notare il grande avvertimento rosso in alto: Non usare questo. –

9

No. Ci isn Un'API Fibra nel Framework. Ho il sospetto che questo è perché c'è poco vantaggio per il loro utilizzo - anche il fiber API page (nativo) cita:

In generale, le fibre non forniscono vantaggi rispetto un'applicazione multithread ben progettato.

.NET rende molto più facile sviluppare un'applicazione "ben progettata" multithread che sospetto sia poco utile per un'API in fibra.

+5

In realtà, le fibre possono essere utilizzate per implementare coroutine relativamente economiche (si veda: http://en.wikipedia.org/wiki/Coroutine e http://en.wikipedia.org/wiki/Fiber_%28computer_science%29). Fino a quando C# supporta in modo nativo le coroutine come caratteristiche del linguaggio, le fibre sono probabilmente il modo più semplice per arrivarci. – LBushkin

+0

Puoi implementarlo utilizzando generatori in C# in modo nativo: http://en.wikipedia.org/wiki/Coroutine#Coroutines_and_generators –

+0

Generatori di mix con alcune delle nuove cose come Rx e TPL, e penso che ti verrebbe difficile trova un buon uso delle fibre in C# ora ... –

6

Se ricordo correttamente, ce n'era uno in .NET 2 beta, ma è stato eliminato. Eric Lippert ha scritto su fibre e continuazioni e ha detto che ha scelto il minimo necessario (link).

Ci sono modi per utilizzare gli iteratori e produrre per realizzare un sistema di coroutine, vedere this link. E another one da Joe Duffy.

+0

Collegamento migliore di quello che ho postato per utilizzare gli iteratori ... –

+0

Questa è roba buona. – dkackman

+1

È interessante notare che stavo giocando con il codice dall'articolo MSDN collegato (sopra) e ho ricevuto questo avviso (.net 4 beta): avviso CS0618: 'System.AppDomain.GetCurrentThreadId()' è obsoleto: 'AppDomain.GetCurrentThreadId ha stato deprecato perché non fornisce un ID stabile quando i thread gestiti sono in esecuzione su fibre (ovvero thread leggeri). Per ottenere un identificatore stabile per un thread gestito, utilizzare la proprietà ManagedThreadId su Thread. http://go.microsoft.com/fwlink/?linkid=14202 " " aka thread leggeri "è interessante. – dkackman

Problemi correlati