using System.Threading; class Program
{ static void Main() { Thread thread = new Thread(DoW"> using System.Threading; class Program
{ static void Main() { Thread thread = new Thread(DoW">
legongju.com
我们一直在努力
2024-12-23 14:31 | 星期一

c# wait 如何正确使用

在C#中,"wait"关键字通常与线程同步相关,如等待一个任务完成或等待某个条件成立。以下是一些关于如何在C#中正确使用"wait"关键字的示例:

  1. 使用Thread.Wait():
using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(DoWork);
        thread.Start();

        // 等待线程完成
        thread.Join();
    }

    static void DoWork()
    {
        Console.WriteLine("Thread started.");
        Thread.Sleep(2000); // 模拟耗时操作
        Console.WriteLine("Thread finished.");
    }
}
  1. 使用Task.Wait():
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await Task.Run(DoWork);
    }

    static void DoWork()
    {
        Console.WriteLine("Thread started.");
        Thread.Sleep(2000); // 模拟耗时操作
        Console.WriteLine("Thread finished.");
    }
}
  1. 使用Monitor.Wait():
using System;
using System.Threading;

class Program
{
    private static readonly object lockObject = new object();
    private static int counter = 0;

    static void Main()
    {
        Thread thread1 = new Thread(IncrementCounter);
        Thread thread2 = new Thread(CheckCounter);

        thread1.Start();
        thread2.Start();

        thread1.Join();
        thread2.Join();
    }

    static void IncrementCounter()
    {
        lock (lockObject)
        {
            counter++;
            Monitor.Pulse(lockObject); // 通知等待的线程
        }
    }

    static void CheckCounter()
    {
        lock (lockObject)
        {
            while (counter == 0)
            {
                Monitor.Wait(lockObject); // 等待计数器变为非零
            }
            Console.WriteLine("Counter is not zero.");
        }
    }
}
  1. 使用ManualResetEvent:
using System;
using System.Threading;

class Program
{
    private static ManualResetEvent resetEvent = new ManualResetEvent(false);

    static void Main()
    {
        Thread thread = new Thread(DoWork);
        thread.Start();

        // 等待线程完成
        resetEvent.WaitOne();
    }

    static void DoWork()
    {
        Console.WriteLine("Thread started.");
        Thread.Sleep(2000); // 模拟耗时操作
        Console.WriteLine("Thread finished.");

        // 通知主线程
        resetEvent.Set();
    }
}

请注意,在使用等待机制时,务必确保正确处理异常,以避免死锁和其他同步问题。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/56130.html

相关推荐

  • c++ set遍历 怎么处理空值

    c++ set遍历 怎么处理空值

    在C++中,std::set是一个关联容器,它包含一组唯一的元素。默认情况下,std::set中的元素是自动排序的,而且不允许有重复的元素。
    如果你想在遍历std::set时...

  • c++ set遍历 能自定义比较器吗

    c++ set遍历 能自定义比较器吗

    是的,在C++中,你可以使用自定义比较器(也称为自定义排序函数或自定义谓词)来遍历std::set。自定义比较器允许你定义自己的排序规则,而不仅仅是使用默认的ope...

  • c++ set遍历 怎么初始化

    c++ set遍历 怎么初始化

    在C++中,要遍历一个std::set,首先需要将其插入一些元素。这里有一个简单的例子,展示了如何初始化一个std::set并遍历它:
    #include #include int main() ...

  • c# nullable 能用于并行计算吗

    c# nullable 能用于并行计算吗

    C# 的 nullable 类型可以用于并行计算,但是需要注意以下几点: 并行计算通常涉及到多线程操作共享数据,因此需要确保数据在多线程环境下的安全访问。使用 nulla...

  • c# nullable 怎样避免空异常

    c# nullable 怎样避免空异常

    在C#中,使用可空类型(nullable)可以避免空异常(NullReferenceException)。可空类型允许变量具有一个默认值(null),这意味着它们可以在需要时没有值。要避...

  • c# nullable 能否进行运算

    c# nullable 能否进行运算

    在C#中,nullable类型允许变量具有一个值,也可能没有值(即可以为null)。要对nullable类型进行运算,你需要使用相应的可空运算符。以下是一些常见的可空运算符...

  • c# nullable 与 null 有何区别

    c# nullable 与 null 有何区别

    在 C# 中,nullable 和 null 都表示值可能不存在或没有值,但它们之间有一些关键区别: 类型:null 是一个特殊的常量,表示一个对象引用不指向任何对象。它用于引...

  • android sharedmemory 怎样避免冲突

    android sharedmemory 怎样避免冲突

    在Android中,共享内存允许多个进程访问同一块内存区域。为了避免冲突,可以采取以下策略: 使用命名空间:为共享内存创建一个唯一的名称,这样不同进程就可以通...