c# - 为什么我应该使用异步操作而不是同步操作?

标签 c# concept

我一直在思考这个问题。

假设我们有一个使用 HttpWebRequest 类的简单异步 Web 请求

class webtest1
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("www.google.com");

    public webtest1()
    {
        this.StartWebRequest();
    }

    void StartWebRequest()
    {
        webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
    }

    void FinishWebRequest(IAsyncResult result)
    {
        webRequest.EndGetResponse(result);
    }
}

同样可以通过同步操作轻松实现:

class webtest1
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("www.google.com");

    public webtest1()
    {
        webRequest.GetResponse();
    }
}

那么,当一个更简单的同步操作就足够了时,我为什么要使用更复杂的异步操作呢?为了节省系统资源?

最佳答案

如果您发出异步请求,则在等待请求响应期间您可以做其他事情。如果您发出同步请求,您必须等待直到您收到响应,然后才能做其他事情。

对于简单的程序和脚本,这可能无关紧要,事实上,在许多情况下,更易于编码和理解的同步方法将是更好的设计选择。

但是,对于非平凡的程序,例如桌面应用程序,同步请求会锁定整个应用程序直到请求完成导致 Not Acceptable 用户体验 .

关于c# - 为什么我应该使用异步操作而不是同步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497353/

相关文章:

c# - 如何在 C# 中反序列化 json 字符串?

c# - 使用游标从使用 C# 的 SQL Server 读取时间序列数据?

c# - 使用 ScreenCapture.CaptureScreenshot 捕获并保存屏幕截图

java - Java 中的服务器既是客户端又是服务器

c++ - 概念可以用来限制值和类型吗?

c++ - 如何编写利用 ADL 的概念

c# - 使用 MVVM 将矩形添加到 Canvas

c# - SQL CE 4 (CTP) 是否支持使用 System.Transaction 命名空间的环境事务?

c++ - 在模板参数中将枚举转换为 int

c++ - 编写一个概念检查库,但在所有基本算术类型上都失​​败了