示例#1
0
        protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            Trace.WriteLine("Starting Pi estimation.");

            try
            {
                IReliableDictionary <int, Estimate> estimateDictionary =
                    await this.StateManager.GetOrAddAsync <IReliableDictionary <int, Estimate> >("estimateDictionary");

                while (true)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    using (ITransaction tx = this.StateManager.CreateTransaction())
                    {
                        await estimateDictionary.AddOrUpdateAsync(
                            tx,
                            1,
                            Estimate.PI(null),
                            (key, value) =>
                        {
                            Estimate next = Estimate.PI(value);

                            ServiceEventSource.Current.ServiceMessage(this, next.ToString());

                            return(next);
                        });

                        await tx.CommitAsync();
                    }

                    await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);

                throw;
            }
        }