小编ptr*_*rsc的帖子

C#Task.Run()与C++ std :: async()

我在Mac 2上运行类似的代码示例,一个用C++编写,另一个用C#编写.2个并行执行的简单任务(或者至少我希望它们),一个在循环中打印'+',另一个在循环中打印' - '.我期待2个样本的输出非常相似,但是我觉得它们有点不同.

C++似乎真正并行运行任务.我可以看到+ - 在每次运行时都很好地交替,但C#似乎运行一个任务一段时间,然后切换到另一个任务并运行一段时间.像这样的东西:

C++: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C# : ++++++++++---------++++++------
Run Code Online (Sandbox Code Playgroud)

我理解无法对并行线程的运行方式做出假设,我很好奇C++能够始终如一地产生如此好的结果.

谢谢你的时间!

C#:

using System;
using System.Threading.Tasks;

public class ConcurrentTasks
{
    public static void Main(String[] args)
    {
        var task1 = Task.Run(()=>DemoTask("+"));
        var task2 = Task.Run(()=>DemoTask("-"));
        var res1 = task1.Result;
        var res2 = task2.Result;
        Console.WriteLine("\nResults:");
        Console.WriteLine(res1);
        Console.WriteLine(res2);
    }

    private static String DemoTask(String label)
    {
        for (int i = 0; i < 1000; i++)
        {
            Console.Write(label);
        }

        return label + " result";
    }
}

// mcs ConcurrentTasks.cs
// mono ConcurrentTasks.exe …
Run Code Online (Sandbox Code Playgroud)

c# c++ concurrency

8
推荐指数
2
解决办法
2069
查看次数

标签 统计

c# ×1

c++ ×1

concurrency ×1