c# - 线程编程 - 与异步编程的关系?对网络应用有用吗?

标签 c# multithreading asynchronous

<分区>

除了 AJAX,我对异步编程知之甚少,当然除了线程背后的基本思想外,我对线程一无所知。所以,不用说,当我在 MSDN blog 中看到时,我有点困惑。最新版本的 Visual Studio/C# 将异步融入语言本身。

那么,作为整个 C#/MVC 世界的初学者,我应该开始学习线程吗?它们对我有用吗?线程和异步编程是否相似?

最佳答案

首先要了解的是异步和线程是两个不同的东西。线程是关于并发的,而不是关于异步的。更具体地说:并发是一种管理异步的策略。

我们需要管理异步,因为计算机程序越来越多地处理高延迟数据源。也就是说,您需要获取信息的时间与信息可供处理器使用的时间之间的差距足够大,以至于处理器应该在这段时间内做其他事情。延迟的来源可能是任何东西——可能是另一个线程正在执行工作而当前线程正在等待。可能是该集群中的另一台计算机正在执行工作,或者可能是您正在等待磁盘旋转或数据通过网络到达,或其他任何原因。如今,延迟无处不在。

处理这种情况的典型方法是同步等待信息可用;即 block 。如果您不想让处理器停止等待信息怎么办?您需要异步等待。也就是说,在你等待的时候做点别的事情。

线程是解决此问题的一种方法,但它们不是很好的解决方案。阻塞或在 UI 线程上做大量工作都不是一个好主意,并且通常处理线程使您必须对您的程序进行全局推理以避免死锁。另一种解决方案是将工作分解成小块;一旦一项工作需要等待,您就将其继续排队,去做其他事情,稍后再回来,所有这些都在同一个线程上。将在下一版本的 C# 中完成的异步工作使用各种技术的组合,以在不阻塞 UI 的情况下实现对异步的更好支持。

如果您对这个主题感兴趣,我在 2011 年 10 月的 MSDN 杂志上有一篇针对初学者的文章 which you can read online here .我的同事 Mads 和 Stephen 也有更深入的文章。

关于c# - 线程编程 - 与异步编程的关系?对网络应用有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623884/

相关文章:

c# - Java和C#——字节数组到长转换的区别

linux - *_r UNIX 调用是可重入的(异步信号安全的)、线程安全的还是两者兼而有之?

java - 当我单击该 Activity 时,其中有 3 个 TextView 。我想在 2 秒的间隙后一个接一个地加载 TextView ?

ios - Swift:Completion Closure 永远不会执行?

javascript - 异步 webpack 配置

c# - Obsolete属性混淆

c# - 如何将此列值转换为整数?

c# - Ajax 错误 - 在 ASP.NET MVC 应用程序中抛出错误

java - Apache Camel : Discarding Split Processors When Complete

javascript - 如何在执行任何类方法之前注入(inject)条件检查