在using语句之外等待任务

时间:2017-12-08 15:06:46

标签: c# .net asynchronous async-await

我有代码:

Task<string> pageIdTask;
using (var seedSession = this.dbSessionManager.Start(agencyId))
{
    pageIdTask = seedSession.Query<ModelInfo>()
                .Where(mi=> mi.Id == modelId)
                .Select(mi=> mi.Tag)
                .SingleAsync();
}

var tokenTask = this.tokenManager.GetAsync(agencyId);

await Task.WhenAll(pageIdTask, tokenTask);

string pageId = pageIdTask.Result;
var token = tokenTask.Result;

这是对的吗?我的意思是,如果在使用语句中初始化它,可以等待任务吗?

或者更好地在使用语句中等待任务?

1 个答案:

答案 0 :(得分:2)

在awating在其外部的using()语句范围内创建的任务没有技术限制,但在大多数情况下,这意味着任务的逻辑取决于使用内部的任何内容( )现在处理。 所以一般来说这样的事情还可以:

df1 = (np.log(df1) * s) ** 3
print (df1)
           A           B           C            D
0  97.664572  286.409295  678.896108  1364.068975
1  33.351293   71.933325  170.508622  5431.168861
2  33.351293  329.617932  368.145163  1364.068975
3  84.862013  286.409295  678.896108  1364.068975
4  21.313578  198.944581  781.316579  3772.578718
5  84.862013  198.944581  170.508622  4603.732789
6  33.351293  198.944581  575.466599  5431.168861
7  97.664572   71.933325  781.316579  2945.161306

但在大多数实际情况中会像:

Task task;
using(var something = GetSomething()){
    task = otherThing.CompletelyUnrelatedLogic();
}
task.Wait(); // no prob