在异步C#中同步执行

马利克·里兹旺(Malik Rizwan)

我想使用异步调用并行运行多个事务,但是在任何事务中我都想按顺序处理所有任务,因为顺序很重要。我使用异步调用,但无济于事,它使整个事务异步,从而产生冲突。

假设我要并行处理多个公司的数据,但是要依次处理公司的数据,我需要产品的productid来获取产品的详细信息,因此首先我必须获取所有产品,然后使用针对公司的productid来获取产品的详细信息。没有productid我无法获得产品详细信息。

Task WrappedInTask = Task.Run(() => CompanyAsync(companyId));
public static async Task CompanyAsync(int companyId)
    {
      string[] products=getAllProducts(compnyId);
       for(int i=0; i<products.length>i; i++)
          {
           //get product detail here using products[i]
          }
    }

我想完全执行getAllProducts(compnyId),然后执行for循环,如果for循环和getAllProducts(compnyId)方法将异步地退出,那么将发生冲突。任何建议做到这一点

马蒂亚斯·西塞罗(Matias Cicero)

如果getAllproducts(compnyId)也是异步方法,那么您可以在执行for循环之前简单地等待它完成:

string[] products = await getAllProducts(compnyId);
for(int i = 0; i < products.length; i++)
{
   // ...
}

无论如何,我不知道您当前的代码示例如何进行编译。如果getallProducts实际上是一个async方法,则string[] products = getAllProducts(compnyId)应该抛出一个错误,因为它返回aTask<string[]>而不是a string[]

编辑

您不应将并行性与异步性混淆。

似乎您想并行地对列表进行迭代。

async 如果您要执行固有的异步操作(例如I / O),通常会使用这些方法,否则就不需要它们。

您可以将System.Threading.Tasks.Parallel类用于您的任务。

//This will probably create new threads (or not) and will iterate your list concurrently
Parallel.ForEach(dt.Rows, dataRow =>
{
     int companyId = //Fetch companyId
     Company(companyId);
});

//Code here will execute after each element has been paralelly iterated.

请注意,您的新CompanyAsync方法签名应更改为:

public static void Company(int companyId);

有关如何使用此方法的更多参考,请阅读:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步功能中的Unity / C#等待冻结同步过程(应在等待之前执行)

来自分类Dev

C#中的同步任务执行

来自分类Dev

在C#中异步执行多个任务

来自分类Dev

使1方法异步以及在C#中同步

来自分类Dev

如何从 C# 中的同步调用异步方法?

来自分类Dev

Powershell C#异步执行

来自分类Dev

Powershell C#异步执行

来自分类Dev

异步执行但同步写入

来自分类Dev

异步执行但同步写入

来自分类Dev

执行流程的C#类中的异步方法

来自分类Dev

执行流程的C#类中的异步方法

来自分类Dev

在Objective-C中同步异步任务

来自分类Dev

在C#中为同步/异步任务添加重试/回滚机制的最佳方法是哪种?

来自分类Dev

在同一HTTP请求中混合异步和同步ASP.NET Core C#

来自分类Dev

C#套接字:异步调用中的同步调用

来自分类Dev

如何在.NET / C#中的异步和同步之间切换

来自分类Dev

对C#异步方法结果执行操作

来自分类Dev

C#网络中的同步

来自分类Dev

在C#中同步线程

来自分类Dev

如何在Windows Service C#中的方法中同步执行所有语句

来自分类Dev

C#在同步上下文中运行异步任务

来自分类Dev

将同步方法转换为与C#异步

来自分类Dev

如何在新的mongo C#驱动程序中执行findAll并使之同步

来自分类Dev

动作中的C#异步

来自分类Dev

使代码在C#中异步

来自分类Dev

C#中的异步问题

来自分类Dev

C#中的异步处理

来自分类Dev

异步函数执行完毕后的C#执行函数

来自分类Dev

如何异步运行存储过程并继续执行 C# 中的其他语句