我想异步执行CPU密集型工作。我想使用这样的代码:
....
updateGUIObj = await setSelectedGUICellValueAsync(arg1, arg2, cssId, isInitializeCbxChecked);
....
public IAsyncOperation<UpdateGUIObj> setSelectedGUICellValueAsync(int arg1, int arg2, String cssId, bool isInitializeCbxChecked)
{
updateGUIObj = new UpdateGUIObj();
.... // compute intensive work setting "updateGUIObj"
return ?????;
}
Run Code Online (Sandbox Code Playgroud)
我应该如何写以上return声明?
IAsyncOperation<TResult>如果要编写WinRT组件,则必须返回。但是,我建议将IAsyncOperation<TResult>代码编写为更自然的async/ await实现的简单包装。
有一个专门为这种情况编写的扩展方法:
public IAsyncOperation<UpdateGUIObj> setSelectedGUICellValueAsync(int arg1, int arg2, String cssId, bool isInitializeCbxChecked)
{
return SetSelectedGuiCellValueAsync(arg1, arg2, cssId, isInitializeCbxChecked).AsAsyncOperation();
}
private async Task<UpdateGUIObj> SetSelectedGuiCellValueAsync(int arg1, int arg2, String cssId, bool isInitializeCbxChecked)
{
updateGUIObj = new UpdateGUIObj();
await Task.Run(....);
return updateGUIObj;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用异步/等待模式并返回Task<>对象:
...
var updateGUIObj = await setSelectedGUICellValueAsync(arg1, arg2, cssId, isInitializeCbxChecked);
...
public async Task<UpdateGUIObj> setSelectedGUICellValueAsync(int arg1, int arg2, String cssId, bool isInitializeCbxChecked)
{
var updateGUIObj = new UpdateGUIObj();
// .... compute intensive work setting "updateGUIObj"
return updateGUIObj;
}
Run Code Online (Sandbox Code Playgroud)