相关疑难解决方法(0)

为所有服务器端代码调用ConfigureAwait的最佳实践

当你有服务器端代码(即一些ApiController)并且你的函数是异步的 - 所以它们返回Task<SomeObject>- 你认为最好的做法是等待你调用的函数ConfigureAwait(false)吗?

我已经读过它更高效,因为它不必将线程上下文切换回原始线程上下文.但是,使用ASP.NET Web Api,如果您的请求是在一个线程上进行的,并且等待某些函数和调用ConfigureAwait(false),则可能会在返回ApiController函数的最终结果时将您置于不同的线程上.

我在下面输入了一个我正在谈论的例子:

public class CustomerController : ApiController
{
    public async Task<Customer> Get(int id)
    {
        // you are on a particular thread here
        var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false);

        // now you are on a different thread!  will that cause problems?
        return customer;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library async-await asp.net-web-api

517
推荐指数
4
解决办法
18万
查看次数

Azure Service Fabric中的发布/订阅模式

我正在开发Azure Service Fabric应用程序,我需要某些演员需要从其他服务接收ping/hook.该应用程序是一种事件分发引擎,旨在这样的工作:

  • 一个事件路由器actor,可以接收事件,然后负责将该事件分发给该事件类型的所有订户.
  • 0..N事件订阅参与者以某种方式需要通知路由器他们希望订阅哪些类型的事件以及他们希望如何传递(同步或异步).
  • 当事件路由器actor接收到该类型的事件时MyEvent,它将识别哪些订阅者正在收听以及他们希望如何传递该事件.对于异步传递,将在Azure Service Bus主题中弹出一条消息.但是对于同步传递,路由器actor将直接在订阅actor上调用订阅方法,等待它们的响应.

其中大部分都是相当直接的,但我不完全确定我将如何实现这些事件的同步传递.我不希望事件路由器actor以任何方式知道订阅事件的actor中的任何内部 - 但是对于当前的ActorProxy实现和类似,需要访问接口才能调用其他actor上的方法.

假设我订阅了一个事件类型,通知事件路由器我的地址是fabric:/MyApp/MyEventSubscriberActor我想要订阅的MyEvent.在Service Fabric API中是否有任何合理的方法我可以编程方式调用该actor上的方法(例如OnEventAsync(MyEvent ev)使用ActorProxy.Create<IMyEventSubscriberActor>()方法?这些API的源代码似乎不公开,所以我没有直接的检查方法如何在引擎盖下完成.

azure-service-fabric

18
推荐指数
1
解决办法
5791
查看次数