在移动应用程序中,我有一个可能很长的异步操作(多个异步网络调用分组在异步函数中)。
_myClassField = myClient.DoANumberOfNetworkCallsAsync();
我在应用程序启动时立即执行调用,然后我显示启动画面和欢迎屏幕,并且仅在第一次用户交互时显示(例如:按下按钮)我最终等待任务并让用户等待响应尚未准备好。
public async Task<object> GetMyLongAwaitedObjectAsync()
{
return await _myClassField;
}
此方法可以多次调用,可能同时形成UI和非UI线程。
这可能是问题的根源还是有效的模式?
答案 0 :(得分:5)
可以根据需要多次等待完成的任务,并且它总会产生相同的结果。
您也可以根据需要多次拨打Wait()
或Result
,任务完成后也不会阻止。
我会改变你的代码,但是:
public Task<object> GetMyLongAwaitedObjectAsync()
{
return _myClassField;
}
这样,编译器就不必生成状态机,每次调用属性时都不会实例化。