【发布时间】:2018-07-20 09:36:04
【问题描述】:
我需要帮助来了解 Task 在 c# 中的工作原理。我想为clauses 中的每个子句调用一次ExecuteClause。我发现我应该创建一个任务列表,然后
await Task.WhenAll(taskList);
最后我可以得到每个任务的结果。这是我目前所拥有的:
public async Task Execute(string[] clauses)
{
var taskList = new List<Task<in>>();
// Here I want to call ExecuteClause for each string in clauses
// and wait for the result.
}
private async Task<int> ExecuteClause(string clause)
{
var connectionString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
var r = await new SqlCommand(clause, connection).ExecuteReaderAsync();
while (await r.ReadAsync())
{
...
}
r.Close();
connection.Close();
// Just an example returning an int
return 1;
}
【问题讨论】:
-
var taskList = clauses.Select(c => ExecuteClause(c));或者只使用一个简单的for循环。 -
@DavidG 太棒了!我想我现在终于明白它是如何工作的了。比我想象的要容易得多!
-
@DavidG - 你也可以使用 ExecuteClause 作为调用 Select 的方法组
-
@JoshE 是的,这就是我可能会用代码编写它的方式,但出于 SO 目的,它经常使人们感到困惑。