1. 程式人生 > 其它 >CKEditor 圖片貼上上傳,實現圖文貼上,圖片自動上傳

CKEditor 圖片貼上上傳,實現圖文貼上,圖片自動上傳

轉 https://www.cnblogs.com/zhaoshujie/p/11082753.html

1、Task的優勢

  ThreadPool相比Thread來說具備了很多優勢,但是ThreadPool卻又存在一些使用上的不方便。比如:
  ◆ ThreadPool不支援執行緒的取消、完成、失敗通知等互動性操作;
  ◆ ThreadPool不支援執行緒執行的先後次序;
  以往,如果開發者要實現上述功能,需要完成很多額外的工作,現在,FCL中提供了一個功能更強大的概念:Task。Task線上程池的基礎上進行了優化,並提供了更多的API。在FCL4.0中,如果我們要編寫多執行緒程式,Task顯然已經優於傳統的方式。
  以下是一個簡單的任務示例:

View Code

2、Task的用法

  2.1、建立任務

  (一)無返回值的方式
  方式1:

  var t1 = new Task(() => TaskMethod("Task 1"));
  t1.Start();
  Task.WaitAll(t1);//等待所有任務結束 
  注:任務的狀態:
  Start之前為:Created
  Start之後為:WaitingToRun 

  方式2:

  Task.Run(() => TaskMethod("Task 2"));

  方式3:

  Task.Factory.StartNew(() => TaskMethod("Task 3")); 直接非同步的方法 
  //或者
  var t3=Task.Factory.StartNew(() => TaskMethod("Task 3"));
  Task.WaitAll(t3);//等待所有任務結束
  //任務的狀態:
  Start之前為:Running
  Start之後為:Running
View Code

  async/await的實現方式:

View Code

  (二)帶返回值的方式
  方式4:

  Task<int> task = CreateTask("Task 1");
  task.Start(); 
  int result = task.Result;
View Code

async/await的實現:

View Code

  2.2、組合任務.ContinueWith

  簡單Demo:

View Code

  任務的序列:

View Code

  子任務:

View Code

  動態並行(TaskCreationOptions.AttachedToParent) 父任務等待所有子任務完成後 整個任務才算完成

View Code

  2.3、取消任務 CancellationTokenSource

View Code

  2.4、處理任務中的異常

  單個任務:

View Code

  多個任務:

View Code

async/await的方式:

View Code

  2.5、Task.FromResult的應用

View Code

  2.6、使用IProgress實現非同步程式設計的程序通知

  IProgress<in T>只提供了一個方法void Report(T value),通過Report方法把一個T型別的值報告給IProgress,然後IProgress<in T>的實現類Progress<in T>的建構函式接收型別為Action<T>的形參,通過這個委託讓進度顯示在UI介面中。

View Code

  2.7、Factory.FromAsync的應用(簡APM模式(委託)轉換為任務)(BeginXXX和EndXXX)

  帶回調方式的

View Code

  不帶回調方式的

View Code
Task啟動帶引數和返回值的函式任務

轉https://www.cnblogs.com/zhaoshujie/p/11082753.html