我仍然在使用異步&多線程加快速度。我試圖監視何時啓動任務仍在運行(在UI中顯示)。然而,即使當我認爲它的Status仍然在運行時,它表明它比我想要的更早地等待RanToCompletion。任務在等待時仍被標記爲RanToCompletion,當仍然運行時
這是我正在做的示例。這一切似乎都圍繞着等待。當它等待時,它被標記爲RanToCompletion。
我要跟蹤其開始這一切,在某種程度上主要任務的指示,我認爲它仍在運行一路到底只有RanToCompletion當它全部完成,其中包括回購電話和WhenAll。
如何更改此項以獲取我想要的關於tskProdSeeding任務狀態的反饋?
我的控制檯應用程序main方法調用此:
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);
}
}
異步函數同步運行,直到第一個「await」在您調用它的時候沒有完成爲止。正因爲如此,只要刪除任務工廠是有風險的,他仍然具有'Thread.Sleep(30000);',如果'ToListAsync'和'WhenAll'同步完成,則會導致調用'SeedingProdAsync'的線程阻塞30秒,如果你要下降工廠(而不是用'Taks.Run('替換它),你必須換出睡了'Task.Delay'。 –
我敢打賭'Thread.Sleep'剛剛添加爲測試跟蹤完成,並不是真正的代碼的一部分 –
我不這麼認爲,它是在一個'while'循環,我敢打賭,睡眠在那裏,因爲他希望任務每30秒運行一次直到它被取消爲止 –