2009-12-22 21 views

回答

7

你見過這樣的:

標題 「實現協同程序爲通過包裝非託管纖維API .NET」
在MSDN雜誌的2003年9月發行

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

+0

我沒有,但一個快速脫脂看起來很有趣。 – dkackman 2009-12-22 20:54:39

+0

有趣的文章,如果相當過時(使用VS 2003風格的託管C++)。 – 2009-12-22 20:55:20

+12

請注意頂部的大紅色警告:不要使用它。 – 2009-12-22 21:12:18

9

號ISN有框架中的光纖API。我懷疑這是因爲幾乎沒有什麼優勢,使用他們 - 即使是fiber API page(本地)提到:

一般來說,纖維不超過一個精心設計的多線程應用程序提供了優勢。

.NET使開發「精心設計」的多線程應用程序變得非常容易,我懷疑它幾乎沒有用於光纖API。

+5

實際上,光纖可以用來實現相對便宜的協同程序(參見:http://en.wikipedia.org/wiki/Coroutine和http://en.wikipedia.org/wiki/Fiber_%28computer_science%29)。在c#本身支持協程作爲語言特性之前,光纖可能是下一個最簡單的方法。 – LBushkin 2009-12-22 21:00:13

+0

你可以在C#中使用生成器實現它:http://en.wikipedia.org/wiki/Coroutine#Coroutines_and_generators – 2009-12-22 21:16:00

+0

將生成器與Rx和TPL等新事物混合在一起,我認爲你很難現在在C#中很好地使用光纖...... – 2009-12-22 21:17:31

6

如果我沒有記錯的話,.NET 2 beta中有一個,但是它被刪除了。 Eric Lippert寫了關於纖維和延續的文章,並說他們選擇了最小的必要(link)。

有許多方法可以使用迭代器和yield來創建協同系統,請參閱this link。和來自Joe Duffy的another one

+0

比我使用迭代器發佈的更好的鏈接... – 2009-12-22 21:26:20

+0

這是好東西。 – dkackman 2009-12-22 21:42:58

+1

有趣的是,我正在玩弄鏈接的MSDN文章(上面)的代碼表單,並得到了此警告(.net 4測試版): 警告CS0618:'System.AppDomain.GetCurrentThreadId()'已過時:'AppDomain.GetCurrentThreadId has已被棄用,因爲當託管線程在光纖上運行時(也就是輕量級線程),它不提供穩定的Id。要獲得託管線程的穩定標識符,請使用Thread上的ManagedThreadId屬性。 http://go.microsoft.com/fwlink/?linkid=14202' 「又名輕量級線程」很有趣。 – dkackman 2009-12-23 02:35:44