Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure service fabric 服务结构参与者接口_Azure Service Fabric_Stateful Actor Service - Fatal编程技术网

Azure service fabric 服务结构参与者接口

Azure service fabric 服务结构参与者接口,azure-service-fabric,stateful-actor-service,Azure Service Fabric,Stateful Actor Service,有可能让一个参与者只包含属性吗 我想创建一个演员,将用于设置和获取属性。例如: 我有一个界面像 public interface IData1 : IActor { string Classification { get; set; } List<string> Tokens { get; set; } } 公共接口IData1:IActor { 字符串分类{get;set;} 列出标记{get;set;} } 我正在尝试使用以下代码创建一个actor代理对象:

有可能让一个参与者只包含属性吗

我想创建一个演员,将用于设置和获取属性。例如: 我有一个界面像

public interface IData1 : IActor
{
    string Classification { get; set; }
    List<string> Tokens { get; set; }
}
公共接口IData1:IActor
{
字符串分类{get;set;}
列出标记{get;set;}
}
我正在尝试使用以下代码创建一个actor代理对象:

var proxy = ActorProxy.Create<IData1>(ActorId.NewId(), "fabric:/Item");
var proxy=ActorProxy.Create(ActorId.NewId(),“fabric:/Item”);
我得到一个错误,说:

Microsoft.ServiceFabric.Actors.dll中发生类型为“System.ArgumentException”的未处理异常。其他信息:actor接口“Item.IData1”的方法“get_Classification”不返回任务或任务。参与者接口方法必须是异步的,并且必须返回Task或Task


根据定义,参与者只能相互传递消息。这只能通过在参与者接口中公开的公共异步方法来实现

如果您想将一个actors状态的属性公开给另一个actor或客户机,那么必须创建这样的显式异步get/set方法

public interface IMyActor : IActor{
    Task<int> GetMyProperty();
    Task SetMyProperty(int value);
}

public class MyActor : StatefulActor<MyActor.ActorState>, IMyActor{

    // This class represents the actors state
    internal sealed class ActorState{
        public int MyProperty {get; set;}
    }

    protected override Task OnActivateAsync()
    {
        State = new ActorState();
        return base.OnActivateAsync();
    }

    public Task<int> GetMyProperty()
    {
        return Task.FromResult(State.MyProperty);
    }

    public Task SetMyProperty(int value)
    {
        State.MyProperty = value;
        return Task.CompletedTask;
    }
}
公共接口IMyActor:IActor{
任务GetMyProperty();
任务SetMyProperty(int值);
}
公共类MyActor:statefactor、IMyActor{
//此类表示参与者状态
内部密封类ActorState{
公共int MyProperty{get;set;}
}
受保护的覆盖任务OnActivateAsync()
{
状态=新ActorState();
返回base.OnActivateAsync();
}
公共任务GetMyProperty()
{
返回Task.FromResult(State.MyProperty);
}
公共任务SetMyProperty(int值)
{
State.MyProperty=值;
返回Task.CompletedTask;
}
}

在actor实现中声明
ActorState
,并将其标记为
sealed
internal
强制执行只有该actor才允许访问该特定状态的想法。

根据定义,actor只允许相互传递消息。这只能通过在参与者接口中公开的公共异步方法来实现

如果您想将一个actors状态的属性公开给另一个actor或客户机,那么必须创建这样的显式异步get/set方法

public interface IMyActor : IActor{
    Task<int> GetMyProperty();
    Task SetMyProperty(int value);
}

public class MyActor : StatefulActor<MyActor.ActorState>, IMyActor{

    // This class represents the actors state
    internal sealed class ActorState{
        public int MyProperty {get; set;}
    }

    protected override Task OnActivateAsync()
    {
        State = new ActorState();
        return base.OnActivateAsync();
    }

    public Task<int> GetMyProperty()
    {
        return Task.FromResult(State.MyProperty);
    }

    public Task SetMyProperty(int value)
    {
        State.MyProperty = value;
        return Task.CompletedTask;
    }
}
公共接口IMyActor:IActor{
任务GetMyProperty();
任务SetMyProperty(int值);
}
公共类MyActor:statefactor、IMyActor{
//此类表示参与者状态
内部密封类ActorState{
公共int MyProperty{get;set;}
}
受保护的覆盖任务OnActivateAsync()
{
状态=新ActorState();
返回base.OnActivateAsync();
}
公共任务GetMyProperty()
{
返回Task.FromResult(State.MyProperty);
}
公共任务SetMyProperty(int值)
{
State.MyProperty=值;
返回Task.CompletedTask;
}
}
在actor实现中声明
ActorState
,并将其标记为
sealed
internal
强制执行只有该actor才允许访问该特定状态的想法