50

非同期コントローラーにはさまざまな例があります。それらのいくつかは、メソッド定義で CancellationToken を使用します。

public async Task<ActionResult> ShowItem(int id, CancellationToken cancellationToken)
{
    await Database.GetItem(id, cancellationToken);
    ...

ただし、他の例や VS2013 の既定の ASP.NET プロジェクトでさえ、CancellationToken をまったく使用せず、それがなくても機能します。

public async Task<ActionResult> ShowItem(int id)
{
    await Database.GetItem(id);
    ...

コントローラーで CancellationToken を使用する必要があるかどうか (およびその理由) は明らかではありません。

4

3 に答える 3

52

あなたはそれを使うべきです。現時点AsyncTimeout、.

于 2013-09-25T17:42:46.843 に答える
7

あなたはこれを使うことができます

public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
    CancellationToken disconnectedToken = Response.ClientDisconnectedToken;
    using (var source = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, disconnectedToken))
    {
        IEnumerable<ReportItem> items;
        using (ApplicationDbContext context = new ApplicationDbContext())
        {
            items = await context.ReportItems.ToArrayAsync(source.Token);
        }
        return View(items);
    }
}

ここから撮影。

于 2016-12-13T05:12:23.497 に答える