【发布时间】:2014-03-30 13:45:16
【问题描述】:
我有一个 .NET 4.5.1 WCF 服务,它处理来自成千上万用户使用的应用程序的同步。我目前使用 Task.WaitAll ,如下所示,它工作正常,但我读到这很糟糕,可能导致死锁等。我相信我过去尝试过WhenAll,但它没有用,我不记得问题是我将再次返回此进行审核,以确保我做对了。我担心的是在这种使用中是否需要和首选阻塞,这是一种 WCF 服务方法,因此为什么 WaitAll 似乎可以正常工作。
我有大约十几种方法,每种方法都更新 Entity Framework 6 中的一个实体,使用现有数据处理传入数据并进行必要的更改。这些方法中的每一个都可能很昂贵,所以我想主要使用并行性来让所有方法在这个强大的 24 核服务器上同时工作。每个方法都作为任务返回,因为将其内容包装在 Task.Run 中。 DoSync 方法创建了一个新列表并将这些同步方法中的每一个添加到列表中。然后我调用 Task.WaitAll(taskList.ToArray()) 并且一切正常。
这是正确的做法吗?我想确保此方法能够很好地扩展,不会导致问题,并且在 WCF 服务场景中正常工作。
【问题讨论】:
-
我知道这个问题很老了,但几乎没有理由在 WCF 服务中使用异步。对于并行性,您可以在其他情况下轻松使用
Parallel.For/Foreach或 PLINQ.AsParallel()。
标签: c# wcf parallel-processing task-parallel-library async-await