c# - 使用 WCF 异步有好处吗?

标签 c# .net wcf asynchronous async-await

我正在尝试快速转换几个 WCF 调用以使用异步生成的方法。我对在代码中使用 async/await 还有些陌生(我主要是一名 Web 开发人员),想看看我的方法是否提供了一些好处。

在下面的代码中,我仍然需要将结果返回给调用者,因此整个操作本身在感知上仍然是“同步”的,但在等待之前似乎不会使当前线程挨饿,这是我正在努力实现的目标。

即使我的调用者(在本例中为 Main)本身不是异步的(不可能),这种方法仍然有任何好处吗?本质上,我所做的就是使用 async/await 关键字并使用 Async WCF 方法。谢谢。

(console.writelines仅用于测试)

class Program
{
    static void Main(string[] args)
    {
        var result = WcfAsync();

        Console.WriteLine(result.Result);
        Console.ReadLine();
    }

    private async static Task<bool> WcfAsync()
    {
        using (var svc = new EmailVendorService.EmailVendorServiceWCFClient())
        {
            Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // Current thread ID
            try
            {
                // long running task to vendor API
                var result = await svc.ExecuteProgramAsync("SomeProgram", "start");

                Console.WriteLine(Thread.CurrentThread.ManagedThreadId); // Outputs different thread's ID

                return result;
            }
            catch
            {
                return false;
            }
        }
    }
}

最佳答案

如果这就是你真正想要的结果,那么就没有任何好处。您正在使用 async WCF 客户端保存线程,但随后会在 Main 中阻塞线程。

但是,如果你的最终解决方案是一个 UI 项目,那么有一个好处:你可以避免阻塞 UI 线程。或者,如果您的最终解决方案是 ASP.NET 网站,则有一个好处:您可以使用 async 保存线程,但不必阻止任何线程来执行此操作。在桌面应用程序(例如控制台/UI 应用程序)中,线程非常“便宜”。 异步的主要好处是避免阻塞 UI(如果有的话)。

如果您正在进行多个并发调用,那么async 可以帮助您的代码更加清晰。但如果它只是控制台应用程序中的单个 WCF 调用,那么实际上并没有任何好处。

关于c# - 使用 WCF 异步有好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049160/

相关文章:

.net - MemoryStream 而不是 byte[] 作为资源添加的文件?

c# - 如何检查一个DLL文件是否被注册?

c# - 尝试在 ASP.NET 网站中托管时出现 WCF 服务异常错误

.net - 资源/App.config 或数据库哪里是应用程序字符串的最佳位置

c# - 如何从 LINQ 获取 ExecuteCommand(或 ExecuteQuery)的字符串值?

java - 如何使用java或C#计算执行时间

c# - 从 switch 语句返回对象(T)

c# - 提供的 URI 方案 'https' 无效;预计 'http' 。参数名称 : via

visual-studio - 如何在Visual Studio 2005中添加WCF服务引用?

c# - try catch 语句的位置