相关疑难解决方法(0)

并发,并行和异步方法有什么区别?

并发是在不同的线程上并行运行两个任务.但是,异步方法并行运行,但在同一个线程上运行.这是如何实现的?那么,并行性呢?

这3个概念之间有什么区别?

concurrency multithreading asynchronous

143
推荐指数
12
解决办法
5万
查看次数

C#5异步/等待 - 是*并发*?

我一直在考虑C#5中新的异步内容,并提出了一个特别的问题.

我知道await关键字是一个简洁的编译器技巧/语法糖来实现连续传递,其中方法的其余部分被分解为Task对象并排队以按顺序运行,但是控制返回到调用方法.

我的问题是,我听说目前这一切都在一个线程上.这是否意味着这种异步内容实际上只是将连续代码转换为Task对象然后Application.DoEvents()在每个任务完成之后调用,然后再开始下一个任务?

或者我错过了什么?(问题的这一部分是修辞 - 我完全清楚我错过了什么 :))

c# continuations async-await

57
推荐指数
2
解决办法
9075
查看次数

process.WaitForExit()异步

我想等待一个进程完成,但process.WaitForExit()挂起我的GUI.是否有基于事件的方式,或者我是否需要生成一个线程来阻止直到退出,然后自己委托事件?

.net c# user-interface asynchronous winforms

43
推荐指数
7
解决办法
3万
查看次数

是什么导致僵局?

我在一段代码中遇到了僵局问题.值得庆幸的是,我已经能够在下面的例子中重现这个问题.作为普通的.Net Core 2.0控制台应用程序运行.

class Class2
{

    static void Main(string[] args)
    {
        Task.Run(MainAsync);
        Console.WriteLine("Press any key...");
        Console.ReadKey();
    }

    static async Task MainAsync()
    {
        await StartAsync();
        //await Task.Delay(1);  //a little delay makes it working
        Stop();
    }


    static async Task StartAsync()
    {
        var tcs = new TaskCompletionSource<object>();
        StartCore(tcs);
        await tcs.Task;
    }


    static void StartCore(TaskCompletionSource<object> tcs)
    {
        _cts = new CancellationTokenSource();
        _thread = new Thread(Worker);
        _thread.Start(tcs);
    }


    static Thread _thread;
    static CancellationTokenSource _cts;


    static void Worker(object state)
    {
        Console.WriteLine("entering worker");
        Thread.Sleep(100);  //some work

        var …
Run Code Online (Sandbox Code Playgroud)

c# multithreading deadlock task taskcompletionsource

5
推荐指数
1
解决办法
263
查看次数