为什么使用异步等待,如果Task.run可以实现相同

时间:2018-06-06 18:59:17

标签: c# async-await task-parallel-library

以下两种方法的行为方式是否相同?关于它们的工作方式是否存在内部差异?两种方法都会释放UI线程,并在延迟结束后继续执行。

    public async Task DoSomethingAsync()
    {
        Console.WriteLine("Test Async start");
        //Any long running operation
        await Task.Delay(5000);
        Console.WriteLine("Test Async end");
    }

    public void TestTask()
    {
        Console.WriteLine("Test Task start");

        Task.Run(() =>
            {    
                //Any long running operation                
                Thread.Sleep(10000);
            }
        ).ContinueWith((prevTask) =>
        {
            Console.WriteLine("Test Task end");
        });
    }

**output**:
Test Async start
Test Task start
Test Async end
Test Task end

1 个答案:

答案 0 :(得分:0)

Asynchronous programming with async and await

  

async和await关键字不会导致额外的线程   创建。异步方法不需要多线程,因为异步   方法不会在自己的线程上运行。该方法在当前运行   同步上下文并仅在线程上使用时间   方法有效。

您不需要System.Threading for Tasks。下面的代码是因为CancellationToken。

一个区别在于您可以访问主(UI)线程上的属性。

参见数量。你甚至可以写主线程,但可能不是一个好习惯。

CREATE TABLE AppAudit (
    AppAuditId INT NOT NULL IDENTITY(1,1) PRIMARY KEY
   ,AppColumnId INT NOT NULL FOREIGN KEY REFERENCES AppColumn(AppColumnId)
   ,OldValue VARCHAR(MAX)
   ,NewValue VARCHAR(MAX)
);