C# 面试题 目录

C# 中如何取消一个异步操作?

推荐答案

在C#中,可以使用CancellationToken来取消一个异步操作。以下是一个示例代码:

-- -------------------- ---- -------
----- -------
----- -----------------
----- -----------------------

----- -------
-
    ------ ----- ---- ------------- -----
    -
        --- --- - --- --------------------------
        --- ----- - ----------

        ---
        -
            ---- --------------- - ---------------------------------
            
            -- -----------
            ----- -----------------
            -------------

            ----- ----------------
        -
        ----- ----------------------------
        -
            ----------------------------
        -
    -

    ------ ----- ---- ------------------------------------------- ------
    -
        --- ---- - - -- - - --- ----
        -
            -------------------------------------
            ------------------------- -- - -------
            ----- ----------------
        -
    -
-

本题详细解读

1. CancellationToken 的作用

CancellationToken 是一个轻量级的对象,用于通知异步任务是否应该被取消。它通常与 CancellationTokenSource 一起使用,后者是 CancellationToken 的创建者和管理者。

2. CancellationTokenSource 的使用

CancellationTokenSource 提供了 Cancel 方法,用于触发取消操作。当调用 Cancel 方法时,所有使用该 CancellationToken 的任务都会收到取消请求。

3. 在异步任务中处理取消请求

在异步任务中,可以通过调用 token.ThrowIfCancellationRequested() 来检查是否收到了取消请求。如果收到了取消请求,该方法会抛出 OperationCanceledException,从而终止任务的执行。

4. 捕获取消异常

在调用异步任务时,可以通过捕获 OperationCanceledException 来处理任务被取消的情况。这允许你在任务被取消时执行一些清理操作或向用户提供反馈。

5. 示例代码解析

  • LongRunningOperationAsync 方法模拟了一个长时间运行的任务,每隔500毫秒输出一次进度。
  • Main 方法中创建了一个 CancellationTokenSource,并在2秒后调用 Cancel 方法取消任务。
  • 如果任务被取消,OperationCanceledException 会被捕获,并输出“操作已取消。”的消息。

通过这种方式,你可以在C#中有效地管理和取消异步操作。

纠错
反馈