在我們運用多執行緒,或者多工作業時,有時候不可避免的會要的到某方法的執行結果,在這裡總結任務、多執行緒和非同步呼叫返回值問題。
先建立乙個task物件,與task的區別在於task物件有個tresult型別的返回值。建立完物件呼叫start()方法,為了獲取方法的返回值,要查詢task物件的result屬性,如果任務還沒有完成他的工作,結果則不可用,result屬性就會阻塞呼叫者。**如下
view code
1 task task = new task(() => test());//非同步呼叫返回結果我們必須用到iasyncresult物件。首先我們通過委託呼叫需要非同步執行的方法,在結束非同步時,呼叫方法endinvoke()方法得到委託方法的返回值。**如下建立任務
2 taskw.start();//
開始任務
3int result = taskw.result;//
得到呼叫方法的結果45
public
inttest()
6
view code
1在多執行緒應用程式中提供和返回值是很複雜的,因此必須對某個過程的引用傳遞給執行緒類的建構函式,該過程不帶引數也不返回值。private
string
maintest()210
11//
非同步執行的方法
12public
string
test()
13
由於這些過程不能為函式也不能使用byref引數,因此從執行於不同執行緒的過程返回值是很複雜的。返回值的最簡單方法是:使用backgroundworker元件來管理執行緒,在任務完成時引發事件,然後用事件處理程式處理結果。
view code
1更多關於多執行緒返回值參見和class
areaclass2210
}1112private
system.componentmodel.backgroundworker backgroundworker1
13 = new
system.componentmodel.backgroundworker();
1415
private
void
testarea2()
1626
27private
void
initializebackgroundworker()
2835
36private
void
backgroundworker1_dowork(
37object
sender,
38system.componentmodel.doworkeventargs e)
3944
45private
void
backgroundworker1_runworkercompleted(
46object
sender,
47system.componentmodel.runworkercompletedeventargs e)
48
自此推薦一篇學習多執行緒和非同步呼叫的文章
非同步呼叫和多執行緒呼叫
同步方法和非同步方法的區別 同步方法呼叫在程式繼續執行之前需要等待同步方法執行完畢返回結果 非同步方法則在被呼叫之後立即返回以便程式在被呼叫方法完成其任務的同時執行其它操作 現在新建乙個windows應用程式,然後放上乙個button1,寫入以下 c code private void button...
JAVA多執行緒實現非同步呼叫
時間 只需要領個提貨單就可以了 去幹別的事情 等到蛋糕做好了,再拿提貨單取蛋糕就可以了。package com.somnus async description 顧客 date 2016年3月9日 下午7 20 41 version 1.0 public class customer catch i...
ZT 非同步呼叫與多執行緒的區別
多執行緒和非同步操作的異同 多執行緒和非同步操作兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為多執行緒和非同步操作是等同的概念。但是,多執行緒和非同步操作還是有一些區別的。而這些區別造成了使用多執行緒和非同步操作的時機的區別。非同步操作的本質 所有的程式最終都...