gpt4 book ai didi

c# - 在 API 中使用任务并行库

转载 作者:行者123 更新时间:2023-12-05 09:05:45 25 4
gpt4 key购买 nike

我有一个方法可以并行运行三个查询。我正在尝试使用 Task Parallel 库来执行此操作,如下所示:

        internal static async Task<RequestAppointmentDBMasterObject> GetDAMasterObject(string facility, string sites, string state)
{

RequestAppointmentDBMasterObject mo = new RequestAppointmentDBMasterObject();

string querySites = query1;
string queryPractitioners = query2;
string queryExistingAppts = query3;

using (IDbConnection db = new OdbcConnection(connectionString))
{
await Task.Run(() =>
{
Parallel.Invoke(
() => { mo.SiteList = db.Query<Sites>(querySites).ToList(); },
() => { mo.PractitionerList = db.Query<Practitioners>(queryPractitioners).ToList(); },
() => { mo.ExistingAppointments = db.Query<AvailResponseObject>(queryExistingAppts).ToList(); }
);
});
}

return mo;
}

然后,在另一个类上,我调用此方法来设置我将要使用的对象,如下所示:

        RequestAppointmentDBMasterObject mo = DataAccess.GetDAMasterObject(facility, site, state).Result;

问题是当我调用 API 时,我从来没有得到返回结果。一旦我将所有内容改回不使用任务和并行库。一切正常。我还在控制台应用程序中尝试了同样的代码,我得到了数据。我不确定为什么我可能会缺少代码,所以我可以在我的 API 上使用它。提前谢谢你。

最佳答案

这比需要的要复杂得多。让任务层包裹其他任务通常不是正确的方法。

您最好将这三个查询作为异步操作执行(即它们返回 Task<T> ,然后并行等待它们:

var t1 = db.QueryAsync(...);
var t2 = db.QueryAsync(...);
var t3 = db.QueryAsync(...);

await Task.WhenAll(t1, t2, t3);

这确实取决于支持多个并发连接的数据库连接(这通常不是真的)。​​

使用 t1.Result等获取返回值。

关于c# - 在 API 中使用任务并行库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66818298/

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