c#可以有乙個簡單易用的機制用於非同步執行方法,那就是委託。下面我介紹三種模式,對於這三種模式來說,原始執行緒都發起了乙個非同步方法,然後做一些其他處理。然而這些模式不同的是,原始執行緒獲取發起的執行緒已經完成的訊息的方式。
1:在等待一直到完成(wait-nutil-done)模式。
在發起了非同步方法以及做了一些其他處理之後,原始執行緒就中斷並且等非同步方法完成之後再繼續。
class program執行結果為return a;
}static void main(string args)
",result);}}
2:輪詢模式(polling)。
原始執行緒定期檢查發起的執行緒是否完成,如果沒有則可以繼續做其他的事情。上**
class program執行結果為:thread.sleep(3000);
return a;
}static void main(string args)
console.writeline("非同步執行完成");
long result = del.endinvoke(iar);
console.writeline("結果為",result);}}
3:**模式(callbacl)。
原始執行緒一直執行,無需等待或檢查發起的執行緒是否完成,在發起的執行緒中的引用方法完成之後,發起的執行緒就會呼叫**方法,由**方法在呼叫endinvoke之前處理非同步方法的結構。上**
class program執行結果為:return a;
}public static void callback(iasyncresult iar)
", r);
}static void main(string args)
}
**方法的簽名和返回型別必須和asynccallbacl委託型別所描述的形式一致。它需要方法接受乙個iasyncresult作為引數並且返回型別是void,如下:
void asynccallback(iasyncresult iar)
我們有多種方式可以為begininvoke方法提供**方法,由於begininvoke中的callback引數是asynccallback型別的委託,我們可以以委託形式提供,我們也可以只提供**方法名稱,讓編譯器為我們建立委託,兩種形式是等價的。
iasyncresult iar1 = del.begininvoke(5,new asynccallback(callwhendone),null);
iasyncresult iar2 = del.bengininvoke(5,callwhendone,null);
每天進步一點 C 設計模式 工廠模式
工廠模式可以分為簡單工廠與抽象工廠,這兩個都屬於建立型設計模式。那麼下面我們簡單的說說2個之間的不同 1.1 簡單工廠 概念 在實際開發中,需求是變化的,我們所使用的某乙個物件,並不能在編譯時完全確定,需要讓物件延遲建立,這時候,我們就可以使用簡單工廠。因此我們說簡單工廠解決的是 單一物件的建立 問...
C 每天進步一點 事件
事件 如果型別定義了事件成員,那麼型別就可以通知其他物件發生了特定的事情。例如,button類提供了乙個名為click的事件。應用程式中的乙個或者多個物件可能想接收關於這個事件的通知,以便在button被點選後採取操作。下面我們利用乙個例子來加深我們對事件的理解 假定現在要設計乙個電子郵件應用程式,...
每天進步一點 linux vi
1 今天 在乙個 大log 裡查詢 末尾 含有 outofmemoryerror 的錯誤日誌,又學習了一下 vi step1 vi log step2 outofmemoryerror step3 按回車 step4 按 n 或者 n 來查詢。注 以上的step2 也可以 outofmemoryer...