public static void DoWork(Func<Guid, IEnumerable<MessageDescriptor>> func) { var id = Guid.NewGuid(); var messages = func(id).ToArray(); var account = CloudStorageAccount.FromConfigurationSetting("mystorage"); var client = account.CreateCloudQueueClient(); var queue = client.GetQueueReference("fastdeployqueue"); queue.CreateIfNotExist(); foreach (var message in messages) { byte[] buffer; long length; BinaryFormatter.Serialize(message, out buffer, out length); queue.AddMessage(new CloudQueueMessage(buffer)); } var task = new RetryTask(() => { using (var context = new DataContext(RoleEnvironment.GetConfigurationSettingValue("mydb"))) { if (context.JobRun.Count(o => o.JobId == id && o.Status == 1) < messages.Length) { throw new ApplicationException(); } } }).WithMaxElapsedTime(300).WithRecoverAction(() => Thread.Sleep(2000)); RetryHelper.Invoke(task); }
void UpdateJob(Guid id, DateTime dateTime, int status) { using (var dataContext = new DataContext(RoleEnvironment.GetConfigurationSettingValue("mydb"))) { var entity = new JobRunInfo { Id = id, LastUpdate = dateTime, Status = status }; dataContext.JobRun.Attach(entity); dataContext.Entry(entity).Property(o => o.LastUpdate).IsModified = true; dataContext.Entry(entity).Property(o => o.Status).IsModified = true; dataContext.SaveChanges(); } }
void PutJob(Guid id, Guid jobId, DateTime dateTime, int status, string worker) { using (var dataContext = new DataContext(RoleEnvironment.GetConfigurationSettingValue("mydb"))) { dataContext.JobRun.Add(new JobRunInfo { Id = id, JobId = jobId, Time = dateTime, LastUpdate = dateTime, Status = status, Worker = worker }); dataContext.SaveChanges(); } }