方法不退出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:如果我删除所有异步的东西,使它同步运行,这个代码片段就可以工作了。

方法不退出await/async (UWP + Rpi3)

我没有在你的代码中看到Complete()方法的差异,试试这个:

public async void Run(IBackgroundTaskInstance taskInstance)
{
    BackgroudTaskDefferal defferal = taskInstance.GetDeferral();
    await DoSomethingAsync();
    // Other irrevelant stuff then...
    defferal.Complete();
}

这可能是挂起的问题,应用程序等待异步操作完成的信号

如果您删除了所有的断点,请添加像

这样的调试日志
`System.Diagnostics.Debug.WriteLine`

调试信息将显示一切正常。

只有在使用VS.进行远程调试时才会出现挂起。

我建议你打开一个用户语音请求