Ответ 1
Вы должны использовать его. Сейчас он применяется только если у вас есть AsyncTimeout
, но вероятно, что будущая версия MVC/WebAPI будет интерпретировать токен как "либо тайм-аут, либо клиент отключен",.
Существуют различные примеры для асинхронных контроллеров. Некоторые из них используют CancellationToken в определении метода:
public async Task<ActionResult> ShowItem(int id, CancellationToken cancellationToken)
{
await Database.GetItem(id, cancellationToken);
...
Но другие примеры и даже проекты ASP.NET по умолчанию для VS2013 вообще не используют CancellationToken и работают без него:
public async Task<ActionResult> ShowItem(int id)
{
await Database.GetItem(id);
...
Не понятно, если мы будем использовать CancellationToken в контроллерах или нет (и почему).
Вы должны использовать его. Сейчас он применяется только если у вас есть AsyncTimeout
, но вероятно, что будущая версия MVC/WebAPI будет интерпретировать токен как "либо тайм-аут, либо клиент отключен",.
Вы можете использовать этот
public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
CancellationToken disconnectedToken = Response.ClientDisconnectedToken;
using (var source = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, disconnectedToken))
{
List<ReportItem> items;
using (ApplicationDbContext context = new ApplicationDbContext())
{
items = await context.ReportItems.ToListAsync(source.Token);
}
return View(items);
}
}
взято из здесь