Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理异步和同步代码之间的边界?_C#_Multithreading_Asynchronous - Fatal编程技术网

C# 处理异步和同步代码之间的边界?

C# 处理异步和同步代码之间的边界?,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,我正在尝试编写一些异步c代码,但在理解asyncvs.Wait()的资源时遇到了一些问题。我读过很多帖子和网站,但不知何故,我仍然不知道如何/为什么我不应该使用等待。我的课程目标是: 异步启动某事 做些工作 等待#1完成 做更多需要完成的工作 我的任务包括: public static void Main() { Task t = DoWork(); DoMoreWork(); t.Wait(); DoWorkThatNeedsT(); } public Tas

我正在尝试编写一些异步c代码,但在理解
async
vs
.Wait()
的资源时遇到了一些问题。我读过很多帖子和网站,但不知何故,我仍然不知道如何/为什么我不应该使用等待。我的课程目标是:

  • 异步启动某事
  • 做些工作
  • 等待#1完成
  • 做更多需要完成的工作
  • 我的任务包括:

    public static void Main()
    {
        Task t = DoWork();
        DoMoreWork();
        t.Wait();
        DoWorkThatNeedsT();
    }
    
    public Task DoWork()
    {
        return Task.Run(() => {Thread.Sleep(1000);});
    }
    
    据我所知,在本例中使用async await只涉及将DoWork()更改为以下内容:

    public async Task DoWork()
    {
        return await Task.Run(() => {Thread.Sleep(1000);});
    }
    

    然后在调用方法中仍然有一个
    .Wait()
    。这是否应该获得无线程异步的好处?有没有其他方法可以实现这一点?

    您所描述的不是async/await的用途。Async/await用于将线程释放回操作系统,供其他系统使用,同时系统等待它无法控制的内容(例如,在远程系统上等待sql语句完成)

    您想要的是与其他代码并行运行任务。使用async/Wait,但不要担心,因为您没有真正需要的东西


    了解何时使用async/await是一本很好的读物。

    您在异步地做什么?否则,使用异步就没有意义了。另外,
    Task.Run()
    不是解决方案,因为它会无缘无故地启动另一个线程。Task.Run中的任何内容都是异步完成的。在这种情况下,它只是睡一会儿。在我的实际程序中,它是删除一些文件并运行一个外部程序。。。你所描述的不是用来做什么的。而是使用后台工作程序/task.run。我在下面解释。我不明白你在问什么。从同步/阻塞代码调用
    async
    ,有很多关于堆栈溢出寻址的问答。包括源于
    Main()
    (本质上不是异步的)的场景。但是在上面的代码中,您提议的将
    DoWork()
    作为
    async
    方法的更改似乎毫无意义;它对整个实现毫无意义。它也与main方法中对
    Wait()
    的调用无关,这似乎是您要问的问题。请修正你的问题;解释你读过的内容以及你具体不理解的内容。@PeterDuniho我正在阅读文档页/SO问题,这些问题说明你几乎不应该使用.Wait(),而应该使用Wait。我不确定该指南是如何应用于这种情况的(或者如何在没有.Wait()的情况下正确地实现它),因此产生了这个问题。根据注释,代码应该保持原样,而不使用async/await。