【问题标题】:Difference between method returning Task and async Task [duplicate]方法返回任务和异步任务之间的区别[重复]
【发布时间】:2015-07-20 06:28:49
【问题描述】:

下面我写了两种方法

    private Task<string> GetStringTask(string url)
    {
        var client = new WebClient();
        var task = client.DownloadDataTaskAsync(new Uri(url));

        var task2 = task.ContinueWith<string>(task1 =>
        {
            var str = Encoding.Default.GetString(task1.Result);
            Thread.Sleep(5000);
            return str;
        });

        return task2;
    }

    private async Task<string> GetStringAsyc(string url)
    {
        var client = new WebClient();
        var htmlByte = await client.DownloadDataTaskAsync(new Uri(url));
        var task2 = await Task.Factory.StartNew(() =>
        {
            var str = Encoding.Default.GetString(htmlByte);
            Thread.Sleep(2000);
            return str;
        });

        return task2;
    }

我可以像下面一样调用另一个异步方法中的两个方法

var mystring = await GetStringTask("http://www.microsoft.com");

var mystring1 = await GetStringAsync("http://www.microsoft.com");

两种方法都返回相同的结果。谁能解释一下这两种方法的区别。

【问题讨论】:

标签: c# asynchronous


【解决方案1】:

async 修饰符只是确定您可以在函数体中使用await 关键字。

来自this 回答:

引入它主要是为了避免向后兼容性问题。如果 方法的异步性必须由编译器推断(即 会通过检测await关键字),那么就有 突然处理现有代码的微妙场景 不同,特别是当你有标识符(变量或函数 名称称为等待)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-05-08
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多