1️⃣ CancellationToken คืออะไร?

By suparat · 08 Oct 2025


ได้เลย 😎 เรามาเรียน CancellationToken ใน C# / .NET แบบเข้าใจง่าย พร้อมตัวอย่างจริง


1️⃣ CancellationToken คืออะไร?

  • CancellationToken ใช้สำหรับ ยกเลิกการทำงานของ Task / Async Method ก่อนที่จะเสร็จ

  • มักใช้ใน งานที่ใช้เวลาเยอะ หรือเป็น Background Task

  • ทำให้เราควบคุมการทำงานได้ เช่น ยกเลิก download, query database, หรือ long-running task


2️⃣ การสร้าง CancellationToken

using System.Threading;

var cts = new CancellationTokenSource(); // สร้าง CancellationTokenSource
CancellationToken token = cts.Token;     // ดึง Token

// ยกเลิกหลัง 3 วินาที
cts.CancelAfter(3000);

3️⃣ ใช้ CancellationToken กับ Task

using System;
using System.Threading;
using System.Threading.Tasks;

async Task DoWorkAsync(CancellationToken token)
{
    for (int i = 0; i < 10; i++)
    {
        token.ThrowIfCancellationRequested(); // เช็คว่ามีการยกเลิกหรือยัง

        Console.WriteLine($"Working... {i}");
        await Task.Delay(1000); // Simulate งานที่ใช้เวลา
    }
    Console.WriteLine("Work completed!");
}

var cts = new CancellationTokenSource();
var task = DoWorkAsync(cts.Token);

// ยกเลิกหลัง 3 วินาที
cts.CancelAfter(3000);

try
{
    await task;
}
catch (OperationCanceledException)
{
    Console.WriteLine("Task was cancelled!");
}

Output ตัวอย่าง:

Working... 0
Working... 1
Working... 2
Task was cancelled!

4️⃣ ใช้ CancellationToken กับ HTTP Requests

using System.Net.Http;

var cts = new CancellationTokenSource();
var client = new HttpClient();

cts.CancelAfter(2000); // ยกเลิกหลัง 2 วินาที

try
{
    var response = await client.GetAsync("https://httpbin.org/delay/5", cts.Token);
    Console.WriteLine(await response.Content.ReadAsStringAsync());
}
catch (OperationCanceledException)
{
    Console.WriteLine("HTTP request was cancelled!");
}
  • เหมาะสำหรับงาน network, IO, database query ที่อาจช้า


5️⃣ สรุป

  • CancellationToken → ใช้ ยกเลิก Async/Task

  • สร้างด้วย CancellationTokenSource

  • ส่ง Token ไปยัง Method หรือ Task

  • เช็คการยกเลิกด้วย token.ThrowIfCancellationRequested()

  • ใช้กับ HTTP, DB, Task, CQRS CommandHandler เพื่อให้สามารถหยุดงานได้อย่างปลอดภัย


ถ้าคุณอยาก ฉันสามารถทำ ตัวอย่างรวม CancellationToken + ICommandHandler + Guard ให้เห็นว่า ยกเลิกคำสั่งก่อนเข้ามือ Handler แบบ CQRS ได้เลย

คุณอยากให้ทำไหม?

1️⃣ CancellationToken คืออะไร?
Web hosting by Somee.com