1+ using System . Threading ;
2+ using System . Threading . Tasks ;
3+ using NUnit . Framework ;
4+
5+ namespace Shuttle . Core . Threading . Tests
6+ {
7+ [ TestFixture ]
8+ public class CallContextFixture
9+ {
10+ [ Test ]
11+ public void Should_be_able_to_flow_data ( )
12+ {
13+ var d1 = new object ( ) ;
14+ var t1 = default ( object ) ;
15+ var t10 = default ( object ) ;
16+ var t11 = default ( object ) ;
17+ var t12 = default ( object ) ;
18+ var t13 = default ( object ) ;
19+ var d2 = new object ( ) ;
20+ var t2 = default ( object ) ;
21+ var t20 = default ( object ) ;
22+ var t21 = default ( object ) ;
23+ var t22 = default ( object ) ;
24+ var t23 = default ( object ) ;
25+
26+ Task . WaitAll (
27+ Task . Run ( ( ) =>
28+ {
29+ CallContext . SetData ( "d1" , d1 ) ;
30+ new Thread ( ( ) => t10 = CallContext . GetData ( "d1" ) ) . Start ( ) ;
31+ Task . WaitAll (
32+ Task . Run ( ( ) => t1 = CallContext . GetData ( "d1" ) )
33+ . ContinueWith ( t => Task . Run ( ( ) => t11 = CallContext . GetData ( "d1" ) ) ) ,
34+ Task . Run ( ( ) => t12 = CallContext . GetData ( "d1" ) ) ,
35+ Task . Run ( ( ) => t13 = CallContext . GetData ( "d1" ) )
36+ ) ;
37+ } ) ,
38+ Task . Run ( ( ) =>
39+ {
40+ CallContext . SetData ( "d2" , d2 ) ;
41+ new Thread ( ( ) => t20 = CallContext . GetData ( "d2" ) ) . Start ( ) ;
42+ Task . WaitAll (
43+ Task . Run ( ( ) => t2 = CallContext . GetData ( "d2" ) )
44+ . ContinueWith ( t => Task . Run ( ( ) => t21 = CallContext . GetData ( "d2" ) ) ) ,
45+ Task . Run ( ( ) => t22 = CallContext . GetData ( "d2" ) ) ,
46+ Task . Run ( ( ) => t23 = CallContext . GetData ( "d2" ) )
47+ ) ;
48+ } )
49+ ) ;
50+
51+ Assert . That ( d1 , Is . SameAs ( t1 ) ) ;
52+ Assert . That ( d1 , Is . SameAs ( t10 ) ) ;
53+ Assert . That ( d1 , Is . SameAs ( t11 ) ) ;
54+ Assert . That ( d1 , Is . SameAs ( t12 ) ) ;
55+ Assert . That ( d1 , Is . SameAs ( t13 ) ) ;
56+
57+ Assert . That ( d2 , Is . SameAs ( t2 ) ) ;
58+ Assert . That ( d2 , Is . SameAs ( t20 ) ) ;
59+ Assert . That ( d2 , Is . SameAs ( t21 ) ) ;
60+ Assert . That ( d2 , Is . SameAs ( t22 ) ) ;
61+ Assert . That ( d2 , Is . SameAs ( t23 ) ) ;
62+
63+ Assert . Null ( CallContext . GetData ( "d1" ) ) ;
64+ Assert . Null ( CallContext . GetData ( "d2" ) ) ;
65+ }
66+ }
67+ }
0 commit comments