c# 并行与异步

c# Parallel.For 设置最大并行个数

Parallel.Options

MaxDegreeOfParallelism 最大并行度

static void Main(string[] args)
{
    ParallelOptions op = new ParallelOptions
    {
        MaxDegreeOfParallelism = 4
    };

    var bag = new ConcurrentBag<int>();
    Parallel.For(0, 10, op, (i, state) =>
    {
        Thread.Sleep(1000);
        if (i > 5)
            bag.Add(i);

        Console.WriteLine(i);
    });
    Console.WriteLine(bag.Count);
}

在这里插入图片描述

ParallelLoopState

.Stop终止当前运行

static void Main(string[] args)
{
    ParallelOptions op = new ParallelOptions
    {
        MaxDegreeOfParallelism = 4
    };

    var bag = new ConcurrentBag<int>();
    Parallel.For(0, 10, op, (i, state) =>
    {
        Thread.Sleep(1000);
        if (i > 5)
        {
            bag.Add(i);
            state.Stop();
            return;
        }

        Console.WriteLine(i);
    });
    Console.WriteLine(bag.Count);
}

在这里插入图片描述

异步

Task输入验证 - 判断参数为空

参数为空异常会同步抛出,不会导致运行失败的任务
ComputeLengthAsync为非 async 方法,函数里抛出异常不会被包装在Task内

static Task<int> ComputeLengthAsync(string text)
{
    if (text == null)
    {
        throw new ArgumentNullException("text");
    }

    return ComputeLengthAsyncImpl(text);
}

static async Task<int> ComputeLengthAsyncImpl(string text)
{
    await Task.Delay(500);
    return text.Length;
}

调用

此处不会打印到 Fetched the task,

var task = ComputeLengthAsync(null);
Console.WriteLine("Fetched the task");
int length = task.Result;
Console.WriteLine("Length: {0}", length);

Task 取消

此处 task.Status为 Canceled

static async Task TaskCanceled()
{
    throw new OperationCanceledException();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值