我剛開始玩我的新鮮樹莓派3和Win10 IOT。方法not awaiting /異步(UWP + Rpi3)
我嘗試了一個小項目,但遇到了異步/等待語句的一些問題。
我不是新來的C#,也不是await /異步,但這是我第一次與UWP,所以我可能會錯過這個平臺比較WinForms/WPF環境的一些技巧。
(僅供參考,我沒有訪問Win10 DEVELOPPEMENT機的時刻,所以下面的代碼片段可能無法編譯馬上)
下面是在一具無頭應用標準模板RPI:
public async void Run(IBackgroundTaskInstance taskInstance)
{
taskInstance.GetDeferral();
await DoSomethingAsync();
// Other irrevelant stuff then...
defferal.Complete();
}
然後異步方法:
private async Task DoSomethingAsync()
{
// Something done async
await Task.Delay(1000);
} // <--- Hangs here
將應用程序部署到Pi時,它會輸入DoSomethingAsync
方法並無問題地執行其內容。
我的問題是,應用程序掛在退出分號。
我們是否需要使用CoreDispatcher,ThreadPool或簡單的new TaskFactory().StartNew(async() => { await DoSomethingAsync(); });
?
我不明白的是使用await/async應該在其他線程上執行我的方法,但它掛起的方式就好像它正在等待UI來處理消息隊列(這裏是WinForms/WPF背景:))
預先感謝您。
編輯:這段代碼如果我刪除所有異步的東西,使其同步運行的作品。
你是什麼意思「掛起」和什麼退出分號?順便說一句,你*不需要提供任何額外的東西。在任何情況下,'await' *等待*異步方法的完成,它不會使異步方法自動異步 –
'我不明白的是使用await /異步應該在另一個線程上執行我的方法'如果您需要在另一個線程完成工作,則不應使用「await」。 「等待」將等待通話結束。 – jackjop
@PanagiotisKanavos,我編輯了我的問題,並評論它懸掛哪一個右括號。我的意思是說,當我一步一步地做,它不會走得更遠。 – Panda