gpt4 book ai didi

c# - 具有异步和同步需求的数据访问

转载 作者:太空宇宙 更新时间:2023-11-03 20:51:54 25 4
gpt4 key购买 nike

对于可能同时需要异步和非异步调用的数据访问层设计,是否有最佳实践?

我看到其他一些帖子似乎在说在异步调用上使用 Task.Run 是同步调用异步方法的“解决方法”。

我有一个方法示例(服务层),可以通过两种方式加以利用。

public override async Task<DataAccess.Fight> Insert(DataAccess.Fight item)
{
await UnitOfWork.Fight.Insert(item);
return item;
}

谢谢。v.

最佳答案

Is there a best practice for a design for a data access layer that could have both a need for Async and Non-Async calls?

首先,我建议公开异步方法。基于 I/O 的数据访问本质上是异步的,因此仅公开异步方法是 IMO 可接受的解决方案。

如果您确实需要异步和同步方法,我建议使用 bool argument hack ,它允许您同时拥有同步和异步 API,而无需复制任何逻辑。

I've seen some other posts that seem to be saying that using Task.Run on async calls is a "work-around" to calling async methods synchronously.

我相信您指的是线程池 hack,我的文章中也有介绍。如果您的代码依赖于任何上下文(例如,HttpContext.Current),这将不起作用。它还可以将代码的预期环境从单线程(隐式同步)执行转移到具有并行性可能性的自由线程环境。 大多数代码对此都没有问题,但这确实说明“只需将其包装在 Task.Run 中然后阻止”并不是适用于所有情况的解决方案。

关于c# - 具有异步和同步需求的数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383618/

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