首页 新闻 会员 周边 捐助

await和直接用task.run 啥区别????

0
[待解决问题]

static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Test1Async();
Console.WriteLine("Call TestAsync1 OK!");
Test2Async();
Console.WriteLine("Call TestAsync2 OK!");
Console.Read();
}

public async static void Test1Async()
{
await Task.Run(() =>
{
System.Threading.Thread.Sleep(5 * 1000);
Console.WriteLine("TestAsync1 OK!");
});
}

public static void Test2Async()
{
Task.Run(() =>
{
System.Threading.Thread.Sleep(5 * 1000);
Console.WriteLine("TestAsync2 OK!");
});
}

===================
直接用task.run 和 用async await怎么感觉没区别啊???

IDOER的主页 IDOER | 初学一级 | 园豆:19
提问于:2019-03-08 12:47
< >
分享
所有回答(2)
0
dudu | 园豆:30778 (高人七级) | 2019-03-08 12:54
0

结论:
1.凡是使用await关键字的方法,都必须打上async标记。
2.async表示方法内有异步方法,调用async方法,会立刻另起线程执行。
3.await只是显示等待线程结束。await表示等待异步方法执行完,并取返回值。
参考链接:http://www.cnblogs.com/neverc/p/4653539.html

    static void Main(string[] args)
    {
        Say();                             //由于Main不能使用async标记
        Console.ReadLine();
    } 

    private async static void Say()
    {
        var t = Test();
        var ta = TestAsync();
        Thread.Sleep(1100);                                     //主线程在执行一些任务
        Console.WriteLine("主线程");                         //主线程完成标记
        Console.WriteLine(t);                                     //不等待返回结果     这里会输出  System.Threading.Task.Task`1[System.String]
        Console.WriteLine(await ta);                            //await 主线程等待取异步返回结果  这里会输出:异步执行完成标记
    }

    static async Task<string> TestAsync()
    {
        return await Task.Run(() =>
        {
            Thread.Sleep(5000);                                 //异步执行一些任务
            return "异步执行完成标记";                          //异步执行完成标记
        });
    }

    static Task<string> Test()
    {
        return Task.Run(() =>
        {
            Thread.Sleep(5000);                                 //同步执行一些任务
            return "同步执行完成标记";                        //同步执行完成标记
        });
    }
三人乐乐 | 园豆:4823 (老鸟四级) | 2019-03-08 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册