await Task.Yield();//1 var data = LoadData();//2 await Task.Run(() => Do(data));//3
上面的代碼類似於:
Task.Run(() => { }).ContinueWith(t => Do(LoadData()));
意思就是: loadData 如果耗時較長那么上述代碼會產生阻塞,為了LoadData不阻塞 特意加了 await Task.Yield();
意思就是: 先排個隊。
再來看注釋:Creates an awaitable task that asynchronously yields back to the current context when awaited.
創建一個異步的空任務,這個任務用於等待。
意思就是: 先創建一個空任務,然后用於等待,而等待后面的代碼會編譯成 后續任務 ,這樣就把本來應該是主任務干的活放到了一個空任務 的后續任務里。
這樣主任務嘚兒...就完事了。