【发布时间】:2016-06-18 11:11:19
【问题描述】:
我仍在学习异步和多线程。我正在尝试监视我开始的任务何时仍在运行(以显示在 UI 中)。但是,它表明它比我想要的更早 RanToCompletion,当它遇到等待时,即使我认为它的状态仍在运行。
这是我正在做的示例。这一切似乎都以等待为中心。当它遇到等待时,它会被标记为 RanToCompletion。
我想跟踪启动这一切的主任务,以向我表明它仍在运行一直到结束并且只有 RanToCompletion 完成后,包括 repo 调用和WhenAll。
如何更改此设置以获得我想要的关于 tskProdSeding 任务状态的反馈?
我的控制台应用程序主方法调用这个:
Task tskProdSeeding;
tskProdSeeding = Task.Factory.StartNew(SeedingProd, _cts.Token);
哪个运行这个:
private async void SeedingProd(object state)
{
var token = (CancellationToken)state;
while (!token.IsCancellationRequested)
{
int totalSeeded = 0;
var codesToSeed = await _myRepository.All().ToListAsync(token);
await Task.WhenAll(Task.Run(async () =>
{
foreach (var code in codesToSeed)
{
if (!token.IsCancellationRequested)
{
try
{
int seedCountByCode = await _myManager.SeedDataFromLive(code);
totalSeeded += seedCountByCode;
}
catch (Exception ex)
{
_logger.InfoFormat(ex.ToString());
}
}
}
}, token));
Thread.Sleep(30000);
}
}
【问题讨论】:
标签: c# asynchronous async-await