コード例 #1
0
ファイル: Program.cs プロジェクト: jeason0813/Ray
        private static async Task <int> RunMainAsync()
        {
            try
            {
                using (var client = await StartClientWithRetries())
                {
                    client.ServiceProvider.InitRabbitMq();

                    await HandlerStart.Start(new[] { "Core", "Read" }, client.ServiceProvider, client);

                    var aActor           = client.GetGrain <IAccount>("1");
                    var bActor           = client.GetGrain <IAccount>("2");
                    var aActorReplicated = client.GetGrain <IAccountRep>("1");
                    var bActorReplicated = client.GetGrain <IAccountRep>("2");
                    while (true)
                    {
                        Console.WriteLine("Press Enter to terminate...");
                        var length    = int.Parse(Console.ReadLine());
                        var stopWatch = new Stopwatch();
                        stopWatch.Start();
                        var tasks = new Task[length * 2];
                        Parallel.For(0, length, i =>
                        {
                            tasks[i * 2]     = aActor.AddAmount(1000);    //1用户充值1000
                            tasks[i * 2 + 1] = aActor.Transfer("2", 500); //转给2用户500
                        });
                        await Task.WhenAll(tasks);

                        stopWatch.Stop();
                        Console.WriteLine($"{length}次交易完成,耗时:{stopWatch.ElapsedMilliseconds}ms");
                        await Task.Delay(200);

                        var aBalance = await aActor.GetBalance();

                        var bBalance = await bActor.GetBalance();

                        Console.WriteLine($"1的余额为{aBalance},2的余额为{bBalance}");

                        var aBalanceReplicated = await aActorReplicated.GetBalance();

                        var bBalanceReplicated = await bActorReplicated.GetBalance();

                        Console.WriteLine($"1的副本余额为{aBalance * 2},2的副本余额为{bBalance}");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(1);
            }
        }
コード例 #2
0
        private static async Task <int> RunMainAsync()
        {
            try
            {
                using (var client = await StartClientWithRetries())
                {
                    Global.Init(client.ServiceProvider);
                    await HandlerStart.Start(new[] { "Core", "Read" }, client.ServiceProvider, client);

                    var aActor           = client.GetGrain <IAccount>("1");
                    var bActor           = client.GetGrain <IAccount>("2");
                    var aActorReplicated = client.GetGrain <IAccountReplicated>("1");
                    var bActorReplicated = client.GetGrain <IAccountReplicated>("2");
                    while (true)
                    {
                        Console.WriteLine("Press Enter to terminate...");
                        Console.ReadLine();
                        await aActor.AddAmount(1000);    //1充值1000

                        await aActor.Transfer("2", 500); //转给2500

                        await Task.Delay(200);

                        var aBalance = await aActor.GetBalance();

                        var bBalance = await bActor.GetBalance();

                        Console.WriteLine($"1的余额为{aBalance},2的余额为{bBalance}");

                        var aBalanceReplicated = await aActorReplicated.GetBalance();

                        var bBalanceReplicated = await bActorReplicated.GetBalance();

                        Console.WriteLine($"1的副本余额为{aBalance},2的副本余额为{bBalance}");
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(1);
            }
        }