首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >控制台中的异步应用程序

控制台中的异步应用程序
EN

Stack Overflow用户
提问于 2015-04-22 00:09:51
回答 1查看 1.2K关注 0票数 1

在此示例代码中,代码以同步方式运行。为什么任务阻塞DoIndependentWork()而只在webTask.Result中阻塞?我知道我可以使用Task.Run()和其他一些东西,但是我正在尝试理解异步,等待更好一些。

代码语言:javascript
复制
static void Main(string[] args)
{
    var webTask = AccessTheWebAsync();
    DoIndependentWork();
    Console.WriteLine("AccessTheWebAsync result: {0}", webTask.Result);

    Console.ReadLine();
}

static async Task<int> AccessTheWebAsync()
{
    HttpClient client = new HttpClient();

    Thread.Sleep(5000);

    Console.WriteLine("AccessTheWebAsync in Thread {0}", Thread.CurrentThread.ManagedThreadId);

    var urlContents = await client.GetStringAsync("http://msdn.microsoft.com");

    return urlContents.Length;
}

static void DoIndependentWork()
{
    Console.WriteLine("DoIndependentWork in Thread {0}", Thread.CurrentThread.ManagedThreadId);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 00:14:10

异步方法仍然运行在与调用者相同的线程上;它一碰到await调用就会返回给调用方。这就是为什么Thread.Sleep(5000)仍然阻塞线程的原因。

在异步等待域中,您应该使用Task.Delay

代码语言:javascript
复制
await Task.Delay(5000);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29785390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档