У меня есть Task
, который запускает процесс win, который генерирует файл, если он еще не создан, и возвращает его. Проблема в том, что действие вызывается более одного раза. Точнее, его src
атрибут элемента <track>
. У меня есть ConcurrentDictionary<Guid, Task<string>>
, который отслеживает, для которого Id процесс в настоящее время выполняется
public async Task<string> GenerateVTTFile(Guid Id)
{
if (_currentGenerators.TryGetValue(id, out Task<string> task))
{
return await task; // problem is here?
}
var t = Run(); // Task
_currentGenerators.TryAdd(id, t);
return await t;
}
В методе действия контроллера
var path = await _svc.GetSomePath();
if (string.IsNullOrEmpty(path))
{
var path = await svc.GenerateVTTFile(id);
return PhysicalFile(path, "text/vtt");
}
return PhysicalFile(path, "text/vtt");
Run()
метод только начинается Process
и ждет его.
process.WaitForExit();
Чего я хочу добиться, так это вернуть результат той же задачи для того же Id. Кажется, что если Id
уже существует в словаре, а я await
, он запускает другой процесс (снова вызывает метод Run).
Есть ли способ достичь этого?