11
11
using System ;
12
12
using System . Collections . Generic ;
13
13
using System . Linq ;
14
- using System . Runtime . CompilerServices ;
15
-
16
14
using NHibernate . Cfg ;
17
15
using NHibernate . Util ;
18
16
@@ -51,20 +49,26 @@ public Task PreInvalidateAsync(object[] spaces, CancellationToken cancellationTo
51
49
}
52
50
}
53
51
54
- public virtual async Task PreInvalidateAsync ( IReadOnlyCollection < string > spaces , CancellationToken cancellationToken )
52
+ public virtual Task PreInvalidateAsync ( IReadOnlyCollection < string > spaces , CancellationToken cancellationToken )
55
53
{
56
- cancellationToken . ThrowIfCancellationRequested ( ) ;
57
- if ( spaces . Count == 0 )
58
- return ;
59
- cancellationToken . ThrowIfCancellationRequested ( ) ;
60
-
61
- using ( await ( _asyncReaderWriterLock . WriteLockAsync ( ) ) . ConfigureAwait ( false ) )
54
+ if ( cancellationToken . IsCancellationRequested )
55
+ {
56
+ return Task . FromCanceled < object > ( cancellationToken ) ;
57
+ }
58
+ try
62
59
{
60
+ if ( spaces . Count == 0 )
61
+ return Task . CompletedTask ;
62
+
63
63
//TODO: to handle concurrent writes correctly, this should return a Lock to the client
64
64
var ts = _updateTimestamps . NextTimestamp ( ) + _updateTimestamps . Timeout ;
65
- await ( SetSpacesTimestampAsync ( spaces , ts , cancellationToken ) ) . ConfigureAwait ( false ) ;
65
+ return SetSpacesTimestampAsync ( spaces , ts , cancellationToken ) ;
66
66
//TODO: return new Lock(ts);
67
67
}
68
+ catch ( Exception ex )
69
+ {
70
+ return Task . FromException < object > ( ex ) ;
71
+ }
68
72
}
69
73
70
74
//Since v5.1
@@ -86,21 +90,27 @@ public Task InvalidateAsync(object[] spaces, CancellationToken cancellationToken
86
90
}
87
91
}
88
92
89
- public virtual async Task InvalidateAsync ( IReadOnlyCollection < string > spaces , CancellationToken cancellationToken )
93
+ public virtual Task InvalidateAsync ( IReadOnlyCollection < string > spaces , CancellationToken cancellationToken )
90
94
{
91
- cancellationToken . ThrowIfCancellationRequested ( ) ;
92
- if ( spaces . Count == 0 )
93
- return ;
94
- cancellationToken . ThrowIfCancellationRequested ( ) ;
95
-
96
- using ( await ( _asyncReaderWriterLock . WriteLockAsync ( ) ) . ConfigureAwait ( false ) )
95
+ if ( cancellationToken . IsCancellationRequested )
96
+ {
97
+ return Task . FromCanceled < object > ( cancellationToken ) ;
98
+ }
99
+ try
97
100
{
101
+ if ( spaces . Count == 0 )
102
+ return Task . CompletedTask ;
103
+
98
104
//TODO: to handle concurrent writes correctly, the client should pass in a Lock
99
105
long ts = _updateTimestamps . NextTimestamp ( ) ;
100
106
//TODO: if lock.getTimestamp().equals(ts)
101
107
if ( log . IsDebugEnabled ( ) )
102
108
log . Debug ( "Invalidating spaces [{0}]" , StringHelper . CollectionToString ( spaces ) ) ;
103
- await ( SetSpacesTimestampAsync ( spaces , ts , cancellationToken ) ) . ConfigureAwait ( false ) ;
109
+ return SetSpacesTimestampAsync ( spaces , ts , cancellationToken ) ;
110
+ }
111
+ catch ( Exception ex )
112
+ {
113
+ return Task . FromException < object > ( ex ) ;
104
114
}
105
115
}
106
116
@@ -127,13 +137,9 @@ public virtual async Task<bool> IsUpToDateAsync(ISet<string> spaces, long timest
127
137
cancellationToken . ThrowIfCancellationRequested ( ) ;
128
138
if ( spaces . Count == 0 )
129
139
return true ;
130
- cancellationToken . ThrowIfCancellationRequested ( ) ;
131
140
132
- using ( await ( _asyncReaderWriterLock . ReadLockAsync ( ) ) . ConfigureAwait ( false ) )
133
- {
134
- var lastUpdates = await ( _updateTimestamps . GetManyAsync ( spaces . ToArray < object > ( ) , cancellationToken ) ) . ConfigureAwait ( false ) ;
135
- return lastUpdates . All ( lastUpdate => ! IsOutdated ( lastUpdate as long ? , timestamp ) ) ;
136
- }
141
+ var lastUpdates = await ( _updateTimestamps . GetManyAsync ( spaces . ToArray < object > ( ) , cancellationToken ) ) . ConfigureAwait ( false ) ;
142
+ return lastUpdates . All ( lastUpdate => ! IsOutdated ( lastUpdate as long ? , timestamp ) ) ;
137
143
}
138
144
139
145
public virtual async Task < bool [ ] > AreUpToDateAsync ( ISet < string > [ ] spaces , long [ ] timestamps , CancellationToken cancellationToken )
@@ -152,25 +158,21 @@ public virtual async Task<bool[]> AreUpToDateAsync(ISet<string>[] spaces, long[]
152
158
return ArrayHelper . Fill ( true , spaces . Length ) ;
153
159
154
160
var keys = allSpaces . ToArray < object > ( ) ;
155
- cancellationToken . ThrowIfCancellationRequested ( ) ;
156
161
157
- using ( await ( _asyncReaderWriterLock . ReadLockAsync ( ) ) . ConfigureAwait ( false ) )
158
- {
159
- var index = 0 ;
160
- var lastUpdatesBySpace =
161
- ( await ( _updateTimestamps
162
- . GetManyAsync ( keys , cancellationToken ) ) . ConfigureAwait ( false ) )
163
- . ToDictionary ( u => keys [ index ++ ] , u => u as long ? ) ;
164
-
165
- var results = new bool [ spaces . Length ] ;
166
- for ( var i = 0 ; i < spaces . Length ; i ++ )
167
- {
168
- var timestamp = timestamps [ i ] ;
169
- results [ i ] = spaces [ i ] . All ( space => ! IsOutdated ( lastUpdatesBySpace [ space ] , timestamp ) ) ;
170
- }
162
+ var index = 0 ;
163
+ var lastUpdatesBySpace =
164
+ ( await ( _updateTimestamps
165
+ . GetManyAsync ( keys , cancellationToken ) ) . ConfigureAwait ( false ) )
166
+ . ToDictionary ( u => keys [ index ++ ] , u => u as long ? ) ;
171
167
172
- return results ;
168
+ var results = new bool [ spaces . Length ] ;
169
+ for ( var i = 0 ; i < spaces . Length ; i ++ )
170
+ {
171
+ var timestamp = timestamps [ i ] ;
172
+ results [ i ] = spaces [ i ] . All ( space => ! IsOutdated ( lastUpdatesBySpace [ space ] , timestamp ) ) ;
173
173
}
174
+
175
+ return results ;
174
176
}
175
177
}
176
178
}
0 commit comments