最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)方法超時停止的幾種方式

 更新時間:2025年11月16日 16:02:12   作者:張工想跑路  
本文主要介紹了C#實現(xiàn)方法超時停止的幾種方式,包括使用CancellationToken、Task.Wait、Task.WhenAny和第三方庫Polly實現(xiàn)方法超時控制的方法,感興趣的可以了解一下

使用CancellationToken實現(xiàn)超時控制

在C#中,可以通過CancellationTokenSourceCancellationToken實現(xiàn)方法超時停止。創(chuàng)建一個帶有超時設(shè)置的CancellationTokenSource,將token傳遞給需要控制的方法。

using System.Threading;
using System.Threading.Tasks;

public async Task ExecuteWithTimeoutAsync()
{
    var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); // 5秒超時
    
    try
    {
        await LongRunningMethodAsync(cts.Token);
    }
    catch (OperationCanceledException)
    {
        Console.WriteLine("操作已超時取消");
    }
}

private async Task LongRunningMethodAsync(CancellationToken token)
{
    for (int i = 0; i < 10; i++)
    {
        token.ThrowIfCancellationRequested();
        await Task.Delay(1000, token); // 模擬耗時操作
        Console.WriteLine($"執(zhí)行第{i+1}步");
    }
}

使用Task.Wait或Task.WhenAny實現(xiàn)超時

對于非異步方法或需要更靈活控制的場景,可以使用Task.WaitTask.WhenAny配合超時設(shè)置。

var task = Task.Run(() => LongRunningMethod());
if (!task.Wait(TimeSpan.FromSeconds(5)))
{
    Console.WriteLine("方法執(zhí)行超時");
}

// 或者使用WhenAny
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(5));
var completedTask = await Task.WhenAny(task, timeoutTask);
if (completedTask == timeoutTask)
{
    Console.WriteLine("方法執(zhí)行超時");
}

使用第三方庫Polly實現(xiàn)超時策略

Polly是一個.NET彈性和瞬態(tài)故障處理庫,提供了簡潔的超時策略實現(xiàn)方式。

using Polly;

var policy = Policy.TimeoutAsync(TimeSpan.FromSeconds(5), 
    TimeoutStrategy.Pessimistic);

try
{
    await policy.ExecuteAsync(async token => 
    {
        await LongRunningMethodAsync(token);
    }, CancellationToken.None);
}
catch (TimeoutRejectedException)
{
    Console.WriteLine("操作已超時");
}

注意事項

處理超時時需要考慮資源清理問題,確保方法被中斷時能正確釋放資源。對于無法響應(yīng)取消請求的阻塞操作,可能需要使用單獨的線程或進程來終止。

某些場景下可能需要結(jié)合多種技術(shù),如先嘗試優(yōu)雅取消,超時后強制終止線程。強制終止線程可能帶來資源泄漏風險,應(yīng)謹慎使用。

到此這篇關(guān)于C#實現(xiàn)方法超時停止的幾種方式的文章就介紹到這了,更多相關(guān)C# 超時停止內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

江城| 鲁甸县| 东阳市| 通道| 辽宁省| 乐平市| 安康市| 通化市| 鹤峰县| 隆昌县| 宣威市| 琼结县| 温泉县| 芮城县| 阿尔山市| 永昌县| 长汀县| 济南市| 钟祥市| 东乡县| 云阳县| 上饶县| 隆化县| 中宁县| 呈贡县| 广宁县| 大宁县| 双流县| 土默特左旗| 永吉县| 华坪县| 平定县| 贵南县| 秭归县| 安平县| 湖北省| 丰原市| 资中县| 永年县| 霍邱县| 资兴市|