public async Task Multiple_TaskLists() { await SyncContext.Clear; // Test the scenario where there multiple clients without // workers that will be used to simulate apps that make calls // on workflows and then create multiple clients that register // different workflows and activities and then verify that // each of the workerless clients are able to execute workflows // and activities and that these end up being executed on the // correct clients. var clients = new List <CadenceClient>(); try { // Initialize the non-worker clients. CadenceClient client1; CadenceClient client2; CadenceClient client3; clients.Add(client1 = await CadenceClient.ConnectAsync(fixture.Settings)); clients.Add(client2 = await CadenceClient.ConnectAsync(fixture.Settings)); clients.Add(client3 = await CadenceClient.ConnectAsync(fixture.Settings)); // Initialize the worker clients. clients.Add(workerClient1 = await CadenceClient.ConnectAsync(fixture.Settings)); clients.Add(workerClient2 = await CadenceClient.ConnectAsync(fixture.Settings)); clients.Add(workerClient3 = await CadenceClient.ConnectAsync(fixture.Settings)); // Start the workers. await workerClient1.RegisterActivityAsync <ActivityWorker1>(); await workerClient1.RegisterWorkflowAsync <WorkflowWorker1>(); await workerClient1.StartWorkerAsync("tasklist-1"); await workerClient2.RegisterActivityAsync <ActivityWorker2>(); await workerClient2.RegisterWorkflowAsync <WorkflowWorker2>(); await workerClient2.StartWorkerAsync("tasklist-2"); await workerClient3.RegisterActivityAsync <ActivityWorker3>(); await workerClient3.RegisterWorkflowAsync <WorkflowWorker3>(); await workerClient3.StartWorkerAsync("tasklist-3"); // Execute each of the worker workflows WITHOUT the associated activities // from each client (both the worker and non-worker clients). foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker1>(); Assert.True(await stub.RunAsync(testActivity: false)); } foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker2>(); Assert.True(await stub.RunAsync(testActivity: false)); } foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker3>(); Assert.True(await stub.RunAsync(testActivity: false)); } // Re-run the workflows calling the activities this time. foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker1>(); Assert.True(await stub.RunAsync(testActivity: true)); } foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker2>(); Assert.True(await stub.RunAsync(testActivity: true)); } foreach (var client in clients) { var stub = client.NewWorkflowStub <IWorkflowWorker3>(); Assert.True(await stub.RunAsync(testActivity: true)); } } finally { foreach (var client in clients) { client.Dispose(); } workerClient1 = null; workerClient2 = null; workerClient3 = null; } }