public CompletionLink(CompletionChain chain, bool isCompleted, string name, Func <CancellationToken, bool> action) { this.chain = chain; this.completionLatch = new ManualResetEvent(isCompleted); this.name = name; this.action = action; }
public void Run() { var resolutionChain = new CompletionChain(cancellationToken => { Debug.Print("Resolving"); var task = Task.Delay(2000); try { task.Wait(cancellationToken); Debug.Print("Resolution Completed"); return true; } catch (OperationCanceledException e) { return false; } }); var compilationChain = new CompletionChain(cancellationToken => { Debug.Print("Compiling"); var task = Task.Delay(1500); try { task.Wait(cancellationToken); Debug.Print("Compilation Completed"); return true; } catch (OperationCanceledException e) { return false; } }); var injectionChain = new CompletionChain(cancellationToken => { Debug.Print("Injecting"); var task = Task.Delay(1000); try { task.Wait(cancellationToken); Debug.Print("Linking Completed"); return true; } catch (OperationCanceledException e) { return false; } }); var resolutionLink1 = resolutionChain.CreateLink("RL1"); var compilationLink1 = compilationChain.CreateLink("CL1"); var injectionLink1 = injectionChain.CreateLink("IL1"); resolutionLink1.Tail(compilationLink1.StartAndWaitForChain); compilationLink1.Tail(injectionLink1.StartAndWaitForChain); var resolutionLink2 = resolutionChain.CreateLink("RL2"); var compilationLink2 = compilationChain.CreateLink("CL2"); var injectionLink2 = injectionChain.CreateLink("IL2"); resolutionLink2.Tail(compilationLink2.StartAndWaitForChain); compilationLink2.Tail(injectionLink2.StartAndWaitForChain); resolutionChain.StartNext(resolutionLink1); Thread.Sleep(1000); resolutionChain.StartNext(resolutionLink2); resolutionLink1.Wait(); compilationLink1.Wait(); injectionLink1.Wait(); resolutionLink2.Wait(); compilationLink2.Wait(); injectionLink2.Wait(); }
public CompletionLink(CompletionChain chain, bool isCompleted, string name, Func<CancellationToken, bool> action) { this.chain = chain; this.completionLatch = new ManualResetEvent(isCompleted); this.name = name; this.action = action; }