任務不產生額外的線程,所以你保存了性能命中,並且它們不會阻塞調用線程,所以我相信這將滿足這兩個需求。
string[] urls = GetUrls();
var requests = new Dictionary<string, Task<string>>()
var responses = new Dictionary<string, string>();
// send off each request and store the on-going task in a dictionary
foreach (string url in urls)
requests.Add(url, Task.Factory.StarNew(() => return WebClient.DownloadString(url))
// get the results asynchronously
Task.Factory.StartNew(() => {
foreach (var request in requests)
responses.Add(request.key, request.Result)
}
現在,當您得到回覆時,您可以通過幾種方法來完成。以上將逐一得到每項任務的結果。當你調用結果時,它將等待任務完成,阻止調用方法,並且如果任務故障,將在此時拋出異常。您也可以使用Task.WaitAll()立即等待整個批處理;由於調用.Result會阻止調用方法,因此您必須從任務中檢索結果。
該示例假設您發送HTTP-GET並希望以字符串形式輸出結果,但無論您想要的HTTP方法或結果如何,您進行調用的方式和結果都是相同的。您還希望添加異常處理以捕獲可能拋出的任何異常。您可以準備好關於任務異常處理here。
「我的.Net和Java應用程序」 - 它真的在一個進程中?或者它可以嗎?或者你有兩種口味的單一應用程序? –
我有一個C#和同一個應用程序的Java版本。 –
看看[JBoss Netty](http://www.jboss.org/netty)或[Apache MINA](http://mina.apache.org/) –