0

使用此代码时出现错误,无法使用开关盒。有没有使用两个或更多演员的替代方法

protected async override Task RunAsync(CancellationToken cancellationToken)        
  {                    
        await base.RunAsync(cancellationToken);

        var proxy = ActorProxy.Create<T>(new ActorId(0));

        switch (proxy)
        {
            case IInvoiceMailActor a1:
                await a1.RegisterReminder();
                break;
            case IActor2 a2:
                await a2.RegisterReminder();
                break;
            default:
                throw new NotImplementedException($"{GetType().FullName}.{nameof(RunAsync)}");
        }
    }

我的演员班

[StatePersistence(StatePersistence.None)]

 internal class Actor1 : Actor, IActor1, IRemindable {
 public Actor1(ActorService actorService, ActorId actorId) : 
 base(actorService, actorId) { }

public async Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period) {
    var location = Directory.GetCurrentDirectory();
    var current = DateTime.Now;
    Thread.Sleep(2 * 60 * 1000);
    using (var writer = File.AppendText("actor.txt")) {
        await writer.WriteLineAsync("1 :: " + current.ToString() + " --> " + DateTime.Now.ToString());
    }
}

public async Task RegisterReminder() {
    try {
        var previousRegistration = GetReminder("Reminder1");
        await UnregisterReminderAsync(previousRegistration);
    } catch (ReminderNotFoundException) { }

    var reminderRegistration = await RegisterReminderAsync("Reminder1", 
    null, TimeSpan.FromMinutes(0), TimeSpan.FromMinutes(1));
}

}

internal class ScheduledActorService<T> : ActorService where T : IActor {

public ScheduledActorService(StatefulServiceContext context, ActorTypeInformation actorType) : base(context, actorType) { }

protected async override Task RunAsync(CancellationToken cancellationToken) {
    await base.RunAsync(cancellationToken);

    var proxy = ActorProxy.Create<T>(new ActorId(0));

    switch (proxy) {
        case IActor1 a1:
            await a1.RegisterReminder();
            break;
        case IActor2 a2:
            await a2.RegisterReminder();
            break;
        default:
            throw new NotImplementedException($"{GetType().FullName}.{nameof(RunAsync)}");
    }
}

}

4

0 回答 0