C#异步编程实现方法防重入

在并发编程中,确保方法不被重复调用至关重要,尤其是在处理耗时操作或关键资源时。本文将介绍如何利用C#异步编程特性,实现方法的防重入控制,并提供完整代码示例。

代码示例

以下代码演示了如何使用异步编程将一个方法改为不能被多次调用的:

using System;
using System.Threading.Tasks;

public class Program
{
    private static bool isRunning = false;

    public static async Task Main(string[] args)
    {
        await RunAsync();
        await RunAsync(); // 尝试多次调用
    }

    public static async Task RunAsync()
    {
        if (isRunning)
        {
            Console.WriteLine('方法正在运行,不能重复调用!');
            return;
        }

        isRunning = true;

        Console.WriteLine('开始执行方法...');

        // 模拟耗时操作
        await Task.Delay(2000);

        Console.WriteLine('方法执行完毕。');

        isRunning = false;
    }
}

代码解读

  1. 使用静态变量 isRunning 控制方法状态: isRunning 用于标识方法是否正在运行。初始值为 false,表示方法未在运行。
  2. 方法入口处检查运行状态: 在 RunAsync 方法开始执行时,首先检查 isRunning 是否为 true
    • 若为 true,则说明方法正在运行,直接返回,阻止重复调用。
    • 若为 false,则将 isRunning 设置为 true,表示方法开始执行。
  3. 方法执行完毕后重置状态: 在方法执行完毕后,将 isRunning 设置为 false,表示方法已执行完毕,可以再次调用。
  4. 异步编程保证执行顺序: Main 方法中使用 await 关键字确保每次调用 RunAsync 方法都会等待其执行完毕后再进行下一次调用,进一步保证了方法的防重入控制。

总结

通过上述代码示例,我们可以清晰地了解到如何利用C#异步编程特性实现方法的防重入控制。这种方法简单有效,能够有效避免因方法重复调用导致的潜在问题,提升程序的健壮性和可靠性。


原文地址: https://www.cveoy.top/t/topic/f1uS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录