方法不退出await/async (UWP + Rpi3)
本文关键字:UWP Rpi3 async 退出 await 方法 | 更新日期: 2023-09-27 17:53:52
我刚刚开始玩我的新树莓派3和Win10 IOT。
我尝试了一个小项目,但遇到了async/await语句的一些问题。
我不是c#新手,也不是await/async新手,但这是我第一次使用UWP,所以与WinForms/WPF环境相比,我可能会错过这个平台的一些技巧。
(仅供参考,我暂时没有使用Win10开发机器,所以下面的代码片段可能无法立即编译)
以下是Rpi上无头应用程序的标准模板:
public async void Run(IBackgroundTaskInstance taskInstance)
{
taskInstance.GetDeferral();
await DoSomethingAsync();
// Other irrevelant stuff then...
defferal.Complete();
}
然后是async方法:
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背景这里:))
提前谢谢你。
EDIT:如果我删除所有异步的东西,使它同步运行,这个代码片段就可以工作了。
我没有在你的代码中看到Complete()方法的差异,试试这个:
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroudTaskDefferal defferal = taskInstance.GetDeferral();
await DoSomethingAsync();
// Other irrevelant stuff then...
defferal.Complete();
}
这可能是挂起的问题,应用程序等待异步操作完成的信号
如果您删除了所有的断点,请添加像
这样的调试日志`System.Diagnostics.Debug.WriteLine`
调试信息将显示一切正常。
只有在使用VS.进行远程调试时才会出现挂起。
我建议你打开一个用户语音请求