в настоящее время у меня есть следующий цикл foreach
foreach (var formId in formIdList)
{
var hasAccess = Task.Run(async () => await _userAccessService.HasAccessToFormId(formId)).Result;
if (!hasAccess)
{
throw new UnauthorizedAccessException();
}
}
, пытающийся выяснить, как выполнить больше задач типа рода. Все, чтобы все функции могли работать параллельно и, если они есть, возвращали falseдля var hasaccess, затем выбросить несанкционированное исключение.
/ ************************** обновленный вопрос для токена отмены ************
используя решение jstewards ниже.немного не знаете, как использовать токен отмены (я прошу прощения, я больше являюсь разработчиком внешнего интерфейса, поэтому немного не в своем духе здесь)
как мне использовать токен для отмены запущенных задач?
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
var formIdList = AttributeRequestHelper.GetFormIdList(filterContext.ActionArguments);
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
Task.Run(async () => await CheckIds(formIdList),token);
}
public async Task CheckIds(IEnumerable<int> formIdList)
{
var results = formIdList.Select(id => _userAccessService.HasAccessToFormId(id)).ToList();
while (results.Any())
{
var result = await Task.WhenAny(results);
results.Remove(result);
var authorized = await result;
if (!authorized) throw new UnauthorizedAccessException();
}
}