中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#代碼協同執行是怎么實現的

發布時間:2021-12-02 13:37:54 來源:億速云 閱讀:117 作者:iii 欄目:編程語言

本篇內容主要講解“C#代碼協同執行是怎么實現的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C#代碼協同執行是怎么實現的”吧!

C#代碼協同執行的支持機制

實際上,這一機制的最終目的是提供一個C#代碼協同執行的支持機制。

using System.Collections.Generic;   public class Tokens : IEnumerable<string> {  public IEnumerator<string> GetEnumerator()  {  for(int i = 0; i<elements.Length; i++)  yield elements[i];  }   }   foreach (string item in new Tokens())  {  Console.WriteLine(item);  }

在這段代碼執行過程中,foreach 的循環體和 GetEnumerator 函數體實際上是在同一個線程中交替執行的。這是一種介于線程和順序執行之間的協同執行模式,之所以稱之為協同(Coroutine),是因為同時執行的多個代碼塊之間的調度是由邏輯隱式協同完成的。順序執行無所謂并行性,而線程往往是由系統調度程序強制性搶先切換,相對來說Win3.x 中的獨占式多任務倒是與協同模型比較類似。
就協同執行而言,從功能上可以分為行為、控制兩部分,控制又可進一步細分為控制邏輯和控制狀態。行為對應著如何處理目標對象,如上述代碼中:行為就是將目標對象打印到控制臺;控制則是如何遍歷這個 elements 數組,可進一步細分為控制邏輯(順序遍歷)和控制狀態(當前遍歷到哪個元素)。下面將按照這個邏輯介紹不同語言中如何實現和模擬這些邏輯。

以 Ruby 語言(語法類似 Python)介紹了 Iterator 機制是如何簡化遍歷操作的代碼。實際上中心思想就是將行為與控制分離,由語言層面的支持來降低控制代碼的薄記工作。

deftextfiles(dir)  Dir.chdir(dir)   Dir["*"].eachdo|entry|  yielddir+"\"+entryif/^.*.txt$/=~entry   ifFileTest.directory?(entry)  textfiles(entry){|file|yielddir+"\"+file}  end  end  Dir.chdir("..")  end   textfiles(“c:\”){|file|  putsfile  }

例如上面這段 Ruby 的遞歸目錄處理代碼中,就采用了與 C# 2.0 中完全類似的語法實現協同執行支持。

對 C# 1.0 和 C++ 這類不支持協同執行的語言,協同執行過程中的狀態遷移或者說執行緒的調度工作,需要由庫和使用者自行實現,例如 STL 中的迭代器 (iterator) 自身必須保存了與遍歷容器相關的位置信息。例如在 STL 中實現協同執行:

#include<vector> #include<algorithm> #include<iostream>  //ThefunctionobjectmultipliesanelementbyaFactor  template<classType> classMultValue  {  private:  TypeFactor;//Thevaluetomultiplyby  public:  //Constructorinitializesthevaluetomultiplyby  MultValue(constType&_Val):Factor(_Val){  }   //Thefunctioncallfortheelementtobemultiplied  voidoperator()(Type&elem)const  {  elem*=Factor;  }  };   intmain()  {  usingnamespacestd;   vector<int>v1;   //   //Usingfor_eachtomultiplyeachelementbyaFactor  for_each(v1.begin(),v1.end(),MultValue<int>(-2));  }

雖然 STL 較為成功的通過迭代器、算法和謂詞,將此協同執行邏輯中的行為和控制分離,謂詞表現行為(MultValue<int>、迭代器(v1.being(), v1.end())表現控制狀態、算法表現控制邏輯(for_each),但仍然存在編寫復雜,使用麻煩,并且語義不連冠的問題。

到此,相信大家對“C#代碼協同執行是怎么實現的”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 宣化县| 收藏| 磴口县| 西丰县| 辉南县| 葫芦岛市| 辽源市| 香港| 田林县| 和田县| 金溪县| 长治县| 揭阳市| 宜兰县| 永德县| 睢宁县| 永川市| 海城市| 潢川县| 贞丰县| 拜城县| 慈溪市| 南召县| 汉川市| 邓州市| 宜阳县| 博野县| 芒康县| 英德市| 南康市| 惠州市| 五大连池市| 平定县| 永善县| 马鞍山市| 肥西县| 额济纳旗| 山阳县| 新丰县| 彰武县|