编辑人员注释:本文作者 Scott Seely是Windows Azure Service Bus团队的开发人员。
我们最近通过NuGet 推出了Windows Azure Service Bus客户端 SDK 的最新版本。目前版本号为 v2.0.0-beta。这个版本的 SDK API 中有一些改进,为所有异步API提供了基于System.Threading.Tasks.Task 的版本。这意味您可以编写普通人都可以阅读的异步代码。如果您想知道哪些类得到了更新,答案很简单:全部更新了!在您之前看到 Begin/End 对的所有位置,您现在都可以看到一个异步版本的方法。因为 SDK 更新版是在 .NET 4.0 上编译的, 因此能在 Visual Studio 2010 和 Visual Studio 2012 上运行。
在这个简短的博文中,原作者想说明几个基本点:
1. 如何获得SDK
2. 如何用通过async/await使用 SDK
3. 谈一点关于Task出现异常的情况
对于 SDK 的用户而言,最重要的一点是,您现在可以使用Service Bus SDK 来编写异步可读代码。
获取 SDK 公测版
目前的2.0 SDK 并非我们的最终产品。尽管如此,它还是包含了很多可以在您当前项目中使用的元素,让您可以使用 Windows Azure Service Bus来构建产品。此程序包只能通过 NuGet 获取。要将此程序包添加到您的项目中,可以用下面两种方法之一:
1. 通过NuGet GUI 安装在Visual Studio 中
2. 通过程序包管理器控制台安装在Visual Studio 中
这些说明的前提是假定您在Visual Studio 中打开了一个项目并且您希望在该项目中添加Service BusSDK。对于喜欢使用鼠标的人,请在项目节点或引用节点上右键单击并选择“ManageNuGet Packages…”。确保您选择了 Include Prerelease(默认为Stable Only)。然后搜索 servicebus。选择 WindowsAzure Service Bus 并点击 Install。
在 Package Manager Console(可通过View\OtherWindows\PackageManager Console 访问)里,通过输入以下内容安装新版本:
Install-Package -IdWindowsAzure.ServiceBus –IncludePrerelease
请确保包含-ncludePrelease 标志,否则您将无法获取基于任务API 的版本。
如何用通过async/await使用 SDK
让我们编写一个使用Microsoft.ServiceBus.NamespaceManager 和Microsoft.ServiceBus.Messaging.QueueClient 的简单方法。我们将检查队列是否存在,如果不存在就创建一个队列。然后我们将向队列发送消息以及从队列接收消息。就是这样,我们要编写Service Bus版的Hello,World。为了显示异步编程的好处,我们等待5秒后再发送消息。代码中的注释说明了程序的执行过程。
我们在这儿看到等待完成发送和接收的时间约 9 秒。在这段时间,客户可以用 CPU 处理其他事情,而不用一直等待消息出现和返回。您还能发现异步代码变得和同步代码一样易于阅读。作为比较, 看一个原来的异步编程模型代码有多令人畏惧的例子,以下代码仅仅做了检查队列是否存在这一件事:
异常和显式任务使用
如果您是异步编程模型(所有的Begin/End 对)的现有用户,您可能知道 Begin 方法将执行参数验证。如果参数发生任何问题,就可能会抛出异常。处理完成后,还可能发生其他错误。这种情况下,您需要在 Begin 和 End 方法上都捕获异常。为了简化您的开发过程,我们选择让异常只有在任务结束后才抛出。这对您有何意义?这意味着您只用在一个地方捕获异常,不用去更多地方寻找。例如,如果您在异步编程模型中的代码是这样的:
且您选择使用基于任务的API,则您的代码将会更改,以在ContinueWith 块中处理所有异常:
或者,您也可以选择继续任务,等待其完成,这样您的代码将变成:
如果您选择了更轻松的途径,对应的async/await异常处理代码将进一步变得更容易读(和写):
结束语
能够向我们的客户提供这些功能,我们感到非常激动。我们希望这样可以使您的开发更简单,也能使您团队中必须使用Service Bus的人员笑逐颜开。
本文翻译自: