Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Runtime Reliable Actor, secara default, memungkinkan masuknya kembali berbasis konteks panggilan logis. Ini memungkinkan aktor untuk masuk kembali jika mereka berada dalam rantai konteks panggilan yang sama. Misalnya, Aktor A mengirim pesan ke Actor B, yang mengirim pesan ke Actor C. Sebagai bagian dari pemrosesan pesan, jika Actor C memanggil Actor A, pesan tersebut masuk kembali, sehingga akan diizinkan. Pesan lain yang merupakan bagian dari konteks panggilan yang berbeda akan diblokir pada Aktor A hingga selesai diproses.
Ada dua opsi yang tersedia untuk reentransi aktor yang ditentukan dalam ActorReentrancyMode enum:
-
LogicalCallContext(perilaku bawaan) -
Disallowed- menonaktifkan reentrancy
public enum ActorReentrancyMode
{
LogicalCallContext = 1,
Disallowed = 2
}
public enum ActorReentrancyMode
{
LogicalCallContext(1),
Disallowed(2)
}
Reentrancy dapat dikonfigurasi dalam ActorServicepengaturan selama pendaftaran. Pengaturan ini berlaku untuk semua instance aktor yang dibuat dalam layanan aktor.
Contoh berikut menunjukkan layanan aktor yang mengatur mode reentransi ke ActorReentrancyMode.Disallowed. Dalam hal ini, jika aktor mengirim pesan masuk kembali ke aktor lain, pengecualian jenis FabricException akan dilemparkan.
static class Program
{
static void Main()
{
try
{
ActorRuntime.RegisterActorAsync<Actor1>(
(context, actorType) => new ActorService(
context,
actorType, () => new Actor1(),
settings: new ActorServiceSettings()
{
ActorConcurrencySettings = new ActorConcurrencySettings()
{
ReentrancyMode = ActorReentrancyMode.Disallowed
}
}))
.GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
ActorEventSource.Current.ActorHostInitializationFailed(e.ToString());
throw;
}
}
}
static class Program
{
static void Main()
{
try
{
ActorConcurrencySettings actorConcurrencySettings = new ActorConcurrencySettings();
actorConcurrencySettings.setReentrancyMode(ActorReentrancyMode.Disallowed);
ActorServiceSettings actorServiceSettings = new ActorServiceSettings();
actorServiceSettings.setActorConcurrencySettings(actorConcurrencySettings);
ActorRuntime.registerActorAsync(
Actor1.getClass(),
(context, actorType) -> new FabricActorService(
context,
actorType, () -> new Actor1(),
null,
stateProvider,
actorServiceSettings, timeout);
Thread.sleep(Long.MAX_VALUE);
}
catch (Exception e)
{
throw e;
}
}
}
Langkah berikutnya
- Pelajari selengkapnya tentang reentrancy dalam dokumentasi referensi API Actor