gpt4 book ai didi

c# - Xamarin 异步方法使用 OnStart()

转载 作者:太空狗 更新时间:2023-10-29 23:20:07 25 4
gpt4 key购买 nike

在应用程序的 OnStart() 事件期间,调用 Async 方法对服务器连接和数据交换进行一些繁重的工作是否被认为是一种好的做法,因为这方法不触及 UI 线程?为使 Async 方法能够执行,应用程序的所有组件是否在此事件触发时正确初始化?

protected override async void OnStart()
{
sendHttpRequestAsync();
}

private async void sendHttpRequestAsync() {
await ...
}

最佳答案

避免在除事件处理程序之外的任何事物上使用async void

引用 Async/Await - Best Practices in Asynchronous Programming

OnStart但是不是事件处理程序。只是根据文档的常规方法...

Application developers override this method to perform actions when the application starts.

作为解决方法,您可以创建自己的自定义事件和处理程序,这将允许在您的事件处理程序上执行 async void。当应用程序调用 OnStart 时,您将订阅该事件,然后引发要异步处理的自定义事件。 sendHttpRequestAsync() 需要重构以返回一个 Task,以便可以安全地等待它。

//Custom event that is raised when the application is starting
private event EventHandler Starting = delegate { };

//Application developers override this method
//to perform actions when the application starts.
protected override void OnStart() {
//subscribe to event
Starting += onStarting;
//raise event
Starting(this, EventArgs.Empty);
}

private async void onStarting(object sender, EventArgs args) {
//unsubscribe from event
Starting -= onStarting;
//perform non-blocking actions
await sendHttpRequestAsync();
}

private async Task sendHttpRequestAsync() {
await ...
}

关于c# - Xamarin 异步方法使用 OnStart(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48957339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com