91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何優雅地終止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
清远市| 泽库县| 平南县| 宾阳县| 福安市| 图片| 宁乡县| 阿拉善右旗| 合江县| 玉环县| 绥阳县| 隆化县| 金乡县| 仲巴县| 聂拉木县| 通化市| 化州市| 上林县| 思茅市| 徐水县| 秦皇岛市| 新余市| 常熟市| 临海市| 友谊县| 南召县| 东海县| 政和县| 龙井市| 老河口市| 东乌珠穆沁旗| 来凤县| 新巴尔虎右旗| 阿鲁科尔沁旗| 博客| 吉首市| 包头市| 富民县| 西乌珠穆沁旗| 六枝特区| 宁河县|