Task的阻塞方式和任務延續

2021-09-29 06:54:10 字數 1477 閱讀 6612

//回顧之前使用thread多個子執行緒執行時阻塞的方法

static void method2()

); thread thread2 = new thread(() =>

);thread1.start();

thread2.start();

//...

thread1.join();//讓呼叫執行緒阻塞

thread2.join();

//如果有很多的thread,是不是也得有很多的join?還有,我們只希望其中乙個執行完以後,後面的其他執行緒就能執行,這個也做不了!

console.writeline("this is main thread!");

}//task各種【阻塞】方式(3個)

static void method3()

");});

task1.start();

task task2 = new task(() =>

");});

task2.start();

第1種方式:挨個等待和前面一樣

task2);

task.waitany(task1, task2);

console.writeline("主線程開始執行!time=" + datetime.now.tolongtimestring());

}//task任務的延續:whenall 希望前面所有任務執行完畢後,再繼續執行後面的執行緒,和前面相比,既有阻塞,又有延續。

static void method4()

");});

task1.start();

task task2 = new task(() =>

");});

task2.start();

//執行緒的延續(主線程不等待,子執行緒依次執行,如果你需要主線程也按照子執行緒的順序來,請你自己把主線程的任務放到延續任務中就可以)

task.whenall(task1, task2).continuewith(task3 =>

");});

console.writeline("主線程開始執行!time=" + datetime.now.tolongtimestring());

}//task的延續:whenany

static void method5()

");});

task1.start();

task task2 = new task(() =>

");});

task2.start();

//執行緒的延續(主線程不等待,子執行緒任何乙個執行完畢,就會執行後面的執行緒)

task.whenany(task1, task2).continuewith(task3 =>

");});

console.writeline("主線程開始執行!time=" + datetime.now.tolongtimestring());

}

C Task阻塞方式和延續操作

task啟動的幾種方式 var task newtask task.start 工廠 task.factory.startnew task.run 同步的方式 task newtask 阻塞執行 task.runsynchronously task阻塞方式和延續操作 下面開啟2個執行緒 task t...

05 阻塞式和定時式哪種獲取任務的方式更好?

上一節我們簡單的介紹一下future,這一節我們來介紹它裡面最常用的功能,那就是獲取任務執行結果的get方法。當我們通過submit的方法向執行緒池中提交乙個runnable任務或者是callable任務時,他們執行完會將結果封裝在物件中,然後再返回給呼叫者,呼叫者在通過future的get方法獲得...

celery的task任務結果在redis儲存亂碼

用redis做backend儲存celery非同步任務的結果,可以看到任務成功存進去了,127.0.0.1 6379 1 keys celery task meta 31a89019 4106 4685 8a71 0075d976d91e不過用這個key去查詢的時候可以看到結果亂碼 127.0.0....