return 非异步方法中的异步任务的正确方法
Correct way to return an async task within a non-async method
return执行以下任务时的最佳实践是什么:
public async Task<Command> BuildCommunicationCommand
作为对象:
public Command BuildCommand
我有以下内容:
public Command BuildCommand()
{
return BuildCommunicationCommand().GetAwaiter().GetResult();
}
但被告知要尽量避免这种情况,我应该等待任务,这样我们就不会阻塞 UI 线程。我认为最好的方法是使 BuildCommand 方法异步以及调用它的任何其他方法。这将是一个巨大的变化,对于其他使用 BuildCommand 的 类 来说并不是真正需要的。我不想通过使用 .Result 造成阻塞,所以在这种情况下最好阅读使用 ConfigureAwait(false) 的方法:
public Command BuildCommand()
{
var Command = BuildCommunicationCommand().ConfigureAwait(false);
return Command.GetAwaiter().GetResult();
}
我可以使用 ConfigureAwait(false) 等待进程完成,然后调用 .GetAwaiter().GetResult() 以 return 它作为对象命令吗?
这是我第一次使用异步任务,所以如果以上任何内容完全是垃圾,我很抱歉!
您可以将对异步方法的调用包装在另一个等待任务完成然后 returns 结果的方法中。当然,这会阻止调用 GetData 的线程。但它摆脱了异步 'virus'。像这样:
private string GetData()
{
var task = GetDataAsync();
task.Wait();
return task.Result;
}
private async Task<string> GetDataAsync()
{
return "Hello";
}
虽然你问的是最佳实践,那就是根据需要将所有内容更改为异步。
return执行以下任务时的最佳实践是什么:
public async Task<Command> BuildCommunicationCommand
作为对象:
public Command BuildCommand
我有以下内容:
public Command BuildCommand()
{
return BuildCommunicationCommand().GetAwaiter().GetResult();
}
但被告知要尽量避免这种情况,我应该等待任务,这样我们就不会阻塞 UI 线程。我认为最好的方法是使 BuildCommand 方法异步以及调用它的任何其他方法。这将是一个巨大的变化,对于其他使用 BuildCommand 的 类 来说并不是真正需要的。我不想通过使用 .Result 造成阻塞,所以在这种情况下最好阅读使用 ConfigureAwait(false) 的方法:
public Command BuildCommand()
{
var Command = BuildCommunicationCommand().ConfigureAwait(false);
return Command.GetAwaiter().GetResult();
}
我可以使用 ConfigureAwait(false) 等待进程完成,然后调用 .GetAwaiter().GetResult() 以 return 它作为对象命令吗?
这是我第一次使用异步任务,所以如果以上任何内容完全是垃圾,我很抱歉!
您可以将对异步方法的调用包装在另一个等待任务完成然后 returns 结果的方法中。当然,这会阻止调用 GetData 的线程。但它摆脱了异步 'virus'。像这样:
private string GetData()
{
var task = GetDataAsync();
task.Wait();
return task.Result;
}
private async Task<string> GetDataAsync()
{
return "Hello";
}
虽然你问的是最佳实践,那就是根据需要将所有内容更改为异步。