Beispiel #1
0
        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;
            }
        }