Skip to content

控制器线程级别

Henry edited this page Oct 12, 2019 · 1 revision

组件可以根据不同情况采用不同的线程机制来调用控制器方法,主要提供以下一种线程调用机制。

Actor

这种模式下,实例所有方法都在一个线程下并有序地执行;这时候实例的所有方法都是线程安全的,客户端只需要创建接口代理名称指定Actor名称即可。

var henry = EventCenter.Create<IUserService>("henry");

ThreadPool

这种配置只适用于接口方法,描述方法无论什么情况都从线程池中执行相关代码,此行为的方法非线程安全

[ThreadInvoke(ThreadType.ThreadPool)]
public Task<int> ThreadInvoke()
{
      mCount++;
      return mCount.ToTask();
}

SingleQueue

这种配置只适用于接口方法,用于描述方法不管那个实例都一致性到一个队列中,此行为的方法内线程安全,不保证对应实例是线程安全.

[ThreadInvoke(ThreadType.SingleQueue)]
public Task<int> GetID([ThreadUniqueID]string name)
{
      if (!mValues.TryGetValue(name, out int value))
      {
           value = 1;
      }
     else
     {
            value++;
      }
      mValues[name] = value;
      return value.ToTask();
}

在这配置下还可以再细分,如上面的[ThreadUniqueID]对不同参数做一致性对列,这个时候name的不同值会一致性到不同的事件队列中。