public void OnComputeBeziersInnerPointEvent(ComputeBeziersInnerPointEvent ComputeBeziersInnerPointEvent) { var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; lock (this.computeBeziersInnerPointTasks) { if (this.computeBeziersInnerPointTasks.ContainsKey(ComputeBeziersInnerPointEvent.ID)) { this.computeBeziersInnerPointTasks[ComputeBeziersInnerPointEvent.ID].Cancel(); } this.computeBeziersInnerPointTasks[ComputeBeziersInnerPointEvent.ID] = tokenSource; } Task.Factory.StartNew(() => this.ComputeEvent(ComputeBeziersInnerPointEvent), token); }
private void ComputeEvent(ComputeBeziersInnerPointEvent ComputeBeziersInnerPointEvent) { var ComputeBeziersInnerPointEventResponse = new ComputeBeziersInnerPointResponse(); ComputeBeziersInnerPointEventResponse.ID = ComputeBeziersInnerPointEvent.ID; ComputeBeziersInnerPointEventResponse.Transforms = new List <Matrix4x4>(); int pointNumber = Convert.ToInt32(ComputeBeziersInnerPointEvent.BeziersControlPoints.GetPointsRawDistance() * (ComputeBeziersInnerPointEvent.PointNumberPerUnitDistance)); for (var i = 0; i <= pointNumber; i++) { Vector3 worldPosition = ComputeBeziersInnerPointEvent.BeziersControlPoints.ResolvePoint((float)i / (float)pointNumber); ComputeBeziersInnerPointEventResponse.Transforms.Add(Matrix4x4.TRS(worldPosition, Quaternion.identity, ComputeBeziersInnerPointEvent.MeshScale)); } lock (this.computeBeziersInnerPointTasks) { this.computeBeziersInnerPointTasks.Remove(ComputeBeziersInnerPointEvent.ID); } this.SendComputeBeziersInnerPointResponse.Invoke(ComputeBeziersInnerPointEventResponse); }