国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

與現(xiàn)有異步源橋接

2019-11-06 06:43:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  除.NET事件外,.NET Framework中還存在其他異步數(shù)據(jù)源。 其中之一是異步方法模式。 在該設(shè)計(jì)模式中,提供了兩種方法。 一個(gè)方法(通常命名為BeginX)用于啟動(dòng)計(jì)算并返回一個(gè)IAsyncResult句柄,該句柄傳遞給第二個(gè)方法(通常稱為EndX),然后檢索計(jì)算結(jié)果。 完成通常通過(guò)實(shí)現(xiàn)AsyncCallback委托或輪詢IAsyncResult.IsCompleted來(lái)發(fā)出信號(hào)。 代碼堅(jiān)持這種模式往往難以閱讀和維護(hù)。 在本主題中,我們將演示如何使用Rx工廠方法將這些異步數(shù)據(jù)源轉(zhuǎn)換為可觀察的序列。

將異步模式轉(zhuǎn)換為可觀察序列

  .NET中的許多異步方法都使用像BeginX和EndX這樣的簽名來(lái)編寫,其中X是異步執(zhí)行的方法名。 BeginX使用參數(shù)來(lái)執(zhí)行該方法,一個(gè)AsyncCallback是一個(gè)動(dòng)作,它接受一個(gè)I??AsyncResult并不返回任何東西,最后是一個(gè)對(duì)象狀態(tài)。 EndX接受從AsyncCallback傳入的IAsyncResult,以檢索異步調(diào)用的值。 Observable類型的FromAsyncPattern運(yùn)算符包裝Begin和End方法(作為參數(shù)傳遞給運(yùn)算符),并返回一個(gè)與Begin相同的參數(shù)并返回一個(gè)observable的函數(shù)。這個(gè)observable表示發(fā)布單個(gè)值的序列,這是您剛才指定的調(diào)用的異步結(jié)果。 在下面的示例中,我們將使用IAsyncResult模式將Stream對(duì)象的BeginRead和EndRead轉(zhuǎn)換為返回可觀察序列的函數(shù)。對(duì)于FromAsyncPattern運(yùn)算符的通用參數(shù),我們指定BeginRead的參數(shù)的類型,直到回調(diào)。由于EndRead方法返回一個(gè)值,我們將這個(gè)類型作為FromAsyncPattern的最終通用參數(shù)。如果將鼠標(biāo)懸停在var上進(jìn)行讀取,您會(huì)注意到,F(xiàn)romAsyncPattern的返回值是一個(gè)具有以下簽名的函數(shù)委托:Func

Stream inputStream = Console.OpenStandardInput();var read = Observable.FromAsyncPattern<byte[], int, int, int>(inputStream.BeginRead, inputStream.EndRead);byte[] someBytes = new byte[10];IObservable<int> source = read(someBytes, 0, 10);IDisposable subscription = source.Subscribe( x => Console.WriteLine("OnNext: {0}", x), ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted"));Console.ReadKey();
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湖口县| 淮北市| 德化县| 峨山| 浪卡子县| 渭源县| 西昌市| 清苑县| 莱阳市| 白城市| 马公市| 西乡县| 吉林省| 怀柔区| 贞丰县| 德安县| 云安县| 沂水县| 关岭| 黄山市| 通城县| 那曲县| 尚义县| 新田县| 永新县| 广丰县| 高雄县| 阿图什市| 赤峰市| 汉阴县| 筠连县| 耒阳市| 斗六市| 江永县| 娱乐| 井陉县| 兴隆县| 崇信县| 梨树县| 太仆寺旗| 铜山县|