public async Task ExclusiveAccess_Test() { var exclusiveAccess0 = new ExclusiveAccess <int>(); var exclusiveAccess1 = new ExclusiveAccess <int>(1); Assert.Equal(0, exclusiveAccess0.Value); Assert.Equal(1, exclusiveAccess1.Value); exclusiveAccess0.Update(u => 2); Assert.Equal(2, exclusiveAccess0.Value); var t1 = Task.Run( () => exclusiveAccess0.Update( v => { Thread.Sleep(100); return(10); })); await Task.Delay(10); Assert.Equal(10, exclusiveAccess0.Value); var t2 = Task.Run( () => exclusiveAccess0.Update( v => { Thread.Sleep(100); return(20); })); await Task.Delay(20); exclusiveAccess0.Use(v => Assert.Equal(20, v)); }
private async Task InitializeConnectionWithTiaPortalProject() { await Task.Run(() => { if (!accessAvailable) { IList <TiaPortalProcess> processes = TiaPortal.GetProcesses(); switch (processes.Count) { case 1: _tiaProcess = processes[0]; MyTiaPortal = _tiaProcess.Attach(); break; case 0: throw new EngineeringTargetInvocationException( "No running instance of TIA Portal was found!"); default: throw new EngineeringTargetInvocationException( "More than one running instance of TIA Portal was found!"); } if (MyTiaPortal.Projects.Count <= 0) { throw new EngineeringTargetInvocationException( "No open TIA Portal Project was found!"); } MyProject = MyTiaPortal.Projects[0]; exclusiveAccess = MyTiaPortal.ExclusiveAccess("My Activity"); accessAvailable = true; } if (!transactionOpen) { transaction = exclusiveAccess.Transaction(MyProject, "No changes commited."); transactionOpen = true; } }).ConfigureAwait(true); }
protected override void ConnectCore() { var connFactory = new ConnectionFactory(); connFactory.HostName = _config.ServiceBusAddress; //Loop through all the custom fields and set them dynamically foreach (var memberInfo in memberInfos) { if (_config.CustomProps.ContainsKey(memberInfo.Name)) { object val = _config.CustomProps[memberInfo.Name]; try { if (memberInfo.MemberType == MemberTypes.Field) { var f = (FieldInfo) memberInfo; var settingValue = Convert.ChangeType(val, f.FieldType); f.SetValue(connFactory, settingValue); } else if (memberInfo.MemberType == MemberTypes.Property) { var p = (PropertyInfo)memberInfo; var settingValue = Convert.ChangeType(val, p.PropertyType); p.SetValue(connFactory, settingValue, null); } } catch (Exception e) { //TODO: Do something with the exception... } } } _connection = connFactory.CreateConnection(); //You can create multiple channels or sessions on the same connection... although not sure what that means. //Using one session per connection here. _session = new ExclusiveAccess<IModel>(_connection.CreateModel()); _session.Use.ExchangeDeclare(EXCHANGE_NAME, ExchangeType.Topic, true); }
public static int Increment(this ExclusiveAccess <int> exclusiveAccess) { return(exclusiveAccess.Update(v => ++ v)); }