我有一個針對Profile158(Windows應用商店,.NET 4.5,Silverlight 5,Windows Phone 8)的可移植類庫(PCL)。我可以輕鬆地處理返回任務類型的方法,並且它可以像我期望的那樣工作。無論何時訪問Result屬性,它都會結束運行異步代碼並返回結果。在Mono Droid中使用PCL中的Microsoft.bcl.async?
但是,如果我在PCL中的方法中使用async/await關鍵字,我會返回一個任務。但是,當我嘗試訪問Result屬性時,它會阻止並永遠不會返回。
望着在這兩種情況下我看到了相同的文本在Visual Studio調試輸出窗口:
Thread started:
Thread started:
Loaded assembly: Mono.Security.dll [External]
Thread started:
Thread started:
所以它看起來好像代碼正在運行,但它永遠不會返回到UI線程。是否有其他人試圖在PCL中使用Microsoft.bcl.async中的PCL?
我的Mono Droid項目針對Android 2.1。
感謝, 約翰 -
更新:
下面是關於不同情景的一些附加信息。首先,這裏是代碼,它寫在UI代碼時在Mono Droid的工作:
var task = request.GetResponseAsync();
string html = task.Result.GetResponseText();
然後我創造了PCL下面的方法:
public async Task<string> Test()
{
IHttpResponse responce = await GetResponseAsync();
return responce.GetResponseText();
}
,並使用從該代碼調用它單UI代碼:
string html = request.Test().Result;
它永遠不會返回......
如果使用Result屬性,則該屬性將阻塞,直到任務完成。如果你從任務本身需要執行的同一線程那樣做,你基本上給自己一個僵局。目前還不清楚你的代碼是做什麼的......你有一個簡短而完整的程序來證明這個問題嗎? –
@dsplaisted在BUILD的演示期間使用了MonoDroid的這一層 - http://channel9.msdn.com/Events/Build/2012/3-004 - 我將PCL標籤添加到這篇文章中,併發出一個bat信號 - 他會在雷德蒙德時間內...... – Stuart
與您的問題無關,但Microsoft.Bcl.Async仍處於測試階段。應該避免在任何生產代碼中使用它。當然,你現在可能只是在測試它。 –