【发布时间】:2017-08-02 16:32:20
【问题描述】:
假设我有 2 个任务(A 和 B)。我可以完全并行运行它们,所以我可以使用:
await Task.WhenAll(A,B)
var resA = await A;
var resB = await B;
现在,如果 A(基于某些条件)返回 false,我不想等待 B。 B 的结果不再让我感兴趣。这个可以吗?
In addition to this answers below:
所以可以肯定的是,任务在创建时立即启动。所以下面的代码应该可以工作。
var A = Usermanager.FindAsync(email.ToString(), password.ToString());
var B = db.Table.AnyAsync(r=> r.email == email.Tostring()); //simplified action
var user = await A;
if (user != null)
{
var resB = await B;
}
else
{
// A was false, so don't await B
}
如果 B 生成一个长时间运行的 sql 语句。仍然使用取消令牌导致以下代码释放 SQL Server 资源会更好吗?
var cts = new CancellationTokenSource();
var A = Usermanager.FindAsync(email.ToString(), password.ToString());
var B = db.Table.AnyAsync(r=> r.email == email.Tostring(), cts.Token); //simplified long running sql action
var user = await A;
if (user != null)
{
var resB = await B;
}
else
{
// A was false, cancel query from B
cts.Cancel();
}
【问题讨论】:
标签: c# entity-framework async-await