中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

如何優雅地終止c#中的線程而不使用abort

c#
小樊
85
2024-08-26 20:49:12
欄目: 編程語言

在C#中,盡量避免使用Thread.Abort()方法來終止線程,因為這可能導致資源泄漏和其他不可預測的問題

  1. 使用標志變量:
private volatile bool _stopRequested;

public void StopThread()
{
    _stopRequested = true;
}

public void MyThreadMethod()
{
    while (!_stopRequested)
    {
        // 執行任務
    }
}
  1. 使用CancellationToken
private CancellationTokenSource _cts;

public void StartThread()
{
    _cts = new CancellationTokenSource();
    var token = _cts.Token;

    Task.Factory.StartNew(() =>
    {
        while (!token.IsCancellationRequested)
        {
            // 執行任務
        }
    }, token);
}

public void StopThread()
{
    _cts.Cancel();
}
  1. 使用ManualResetEventAutoResetEvent
private ManualResetEvent _stopEvent;

public void StartThread()
{
    _stopEvent = new ManualResetEvent(false);

    ThreadPool.QueueUserWorkItem(_ =>
    {
        while (!_stopEvent.WaitOne(0))
        {
            // 執行任務
        }
    });
}

public void StopThread()
{
    _stopEvent.Set();
}

在這些示例中,我們使用了不同的方法來通知線程何時應該停止。這些方法比直接調用Thread.Abort()更加優雅,因為它們允許線程在適當的時候自然地停止,從而避免了資源泄漏和其他問題。

0
镇康县| 密云县| 略阳县| 潮安县| 台州市| 句容市| 兴隆县| 正宁县| 巴楚县| 高密市| 福清市| 金昌市| 泰州市| 正宁县| 黄大仙区| 上高县| 康马县| 大石桥市| 西峡县| 县级市| 青冈县| 辉南县| 当涂县| 昆山市| 栾城县| 宁夏| 莲花县| 九台市| 安达市| 大港区| 察隅县| 九江县| 日土县| 绥滨县| 隆昌县| 长海县| 奇台县| 龙南县| 昌宁县| 武乡县| 沂水县|