gpt4 book ai didi

c# - 在没有等待的情况下使用异步的最佳实践是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:08:14 25 4
gpt4 key购买 nike

<分区>

申请

我有一个 View Model被多个项目引用或 Views .

由于 API,一些 View项目是async而其他人则不是。

View项目将它的接口(interface)实现注入(inject)到 View Model 中使用 IOC 容器。

代码

考虑这个最小的代码示例

界面:

public interface IDatabase
{
Task<Data> GetData();
}

View Model等待 GetData 方法:

public class DisplayDataViewModel
{
private readonly IDatabase _database
public DisplayDataViewModel(IDatabase database)
{
_database = database;
}

private async Task GetDataFromDatabase()
{
Data data = await _database.GetData();
// do something with data...
}
}

Asynchronous View项目使用异步函数获取数据

public class AsynchronousViewDataBase : IDatabase
{
public async Task<Data> GetData()
{
return await GetDataAsync();
}
}

Synchronous View项目使用同步调用获取数据,但是由于接口(interface)的限制,需要返回一个Task,而我只对Data的返回感兴趣从而使方法异步。

public class SynchronousViewDatabase : IDatabase
{
public async Task<Data> GetData()
{
return GetData();
}
}

但是然后它给出了警告:

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

这对我来说有点好,因为我不关心它是否同步运行。

使用 Task.Run抑制警告似乎是不必要的,因为调用可以(在我的情况下)来自后台线程。

问题

是否有实现这种非等待异步方法的最佳实践?可以忽略警告吗?有没有更好的方法来实现 async 同步调用?

附加

我确实将接口(interface)转换为同步调用,并使用 Task.ResultAsynchronous View (修复了警告),但这导致应用程序停止响应以及许多棘手的问题。

注意:我不是声明使用 async关键字神奇地使方法异步运行。

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