為了搞清.net的執行順序我們做如下準備
1,做3個任務,分別往3個文字檔案寫入100萬行時間戳,每個任務根據計算大概需要400+毫秒。
datetime dt1;
private void dowork1()
for (int i = 0; i < 1000000; ++i)
writer.writeline((datetime.now-dt1).milliseconds.tostring());
writer.close();
private void dowork2()
for (int i = 0; i < 1000000; ++i)
writer.writeline((datetime.now - dt1).milliseconds.tostring());
writer.close();
private void dowork3()
for (int i = 0; i < 1000000; ++i)
writer.writeline((datetime.now - dt1).milliseconds.tostring());
writer.close();
2,採用如下方法呼叫者三個任務:以執行緒的方式呼叫任務1,然後呼叫任務2,最後呼叫任務3。
dt1 = datetime.now;
task t1 = new task(dowork1);
t1.start();
dowork2();
dowork3();
3,最終得出第乙個結果:
任務1和任務2是同步進行的,所以時間戳是一致的。證明採用執行緒時,主線程和副執行緒是同步進行的
任務3一直等待,直至任務2完成才開始。任務3的時間戳從任務2的時間戳繼續。證明同乙個執行緒裡,是任務是順序執行的。
4,那麼非同步的執行順序是如何的呢?
我們用下面的**當模擬一項工作,耗時5s
private task worker1()
return task.run(()=>
system.threading.thread.sleep(5000);
然後在winform裡面把工作狀態顯示出來。很明顯執行到這裡的時候label1變成"worker starting to work",五秒後變成"worker done"
label1.text = "worker starting to work";
await worker1();
label1.text = "worker done";
5,最終得出第二個結果,採用async/await非同步的時候是順序執行的,好處是可以跟同步任務一樣理解,又不至於引起ui卡死
Lua順序 執行順序
nginx下lua處理階段與使用範圍 例如lua shared dict共享記憶體的申請,只有當nginx重起後,共享記憶體資料才清空,這常用於統計。set by lua 設定乙個變數,常用與計算乙個邏輯,然後返回結果 該階段不能執行output api control api subrequest...
c程式的執行順序
在c語言的課堂裡老師都告訴我們程式的執行入口函式是main函式,但是實際上程式在執行之初最先開始執行的卻不是main,至少還有一些程式設計師可控的函式可以在main函式之前執行,也可以有一些函式在main結束之後執行。attribute constructor 標記的函式實在main執行之前執行的,...
C 繼承的執行順序
自己對多型中建構函式 函式過載執行順序和過程一直有些不理解,經過測試,對其中的執行順序有了一定的了解,希望對初學者有些幫助。eg1 public class a public virtual void fun public class b a public void fun class progra...