@@ -25,7 +25,8 @@ public Connection(IConnectionSettings settings)
25
25
throw new ArgumentNullException ( "settings" ) ;
26
26
27
27
this . _ConnectionSettings = settings ;
28
- this . _ResourceLock = new Semaphore ( settings . MaximumAsyncConnections , settings . MaximumAsyncConnections ) ;
28
+ var semaphore = Math . Max ( 1 , settings . MaximumAsyncConnections ) ;
29
+ this . _ResourceLock = new Semaphore ( semaphore , semaphore ) ;
29
30
this . _enableTrace = settings . TraceEnabled ;
30
31
}
31
32
@@ -212,6 +213,9 @@ protected virtual ConnectionStatus DoSynchronousRequest(HttpWebRequest request,
212
213
protected virtual Task < ConnectionStatus > DoAsyncRequest ( HttpWebRequest request , string data = null )
213
214
{
214
215
var tcs = new TaskCompletionSource < ConnectionStatus > ( ) ;
216
+ if ( this . _ConnectionSettings . MaximumAsyncConnections <= 0 )
217
+ return this . CreateIterateTask ( request , data , tcs ) ;
218
+
215
219
var timeout = this . _ConnectionSettings . Timeout ;
216
220
if ( ! this . _ResourceLock . WaitOne ( timeout ) )
217
221
{
@@ -227,20 +231,23 @@ protected virtual Task<ConnectionStatus> DoAsyncRequest(HttpWebRequest request,
227
231
}
228
232
try
229
233
{
230
- //return Task.Factory.StartNew(() =>
231
- //{
232
-
233
- this . Iterate ( this . _AsyncSteps ( request , tcs , data ) , tcs ) ;
234
- return tcs . Task ;
235
-
236
- //}, TaskCreationOptions.LongRunning);
234
+ return Task . Factory . StartNew (
235
+ ( ) => this . CreateIterateTask ( request , data , tcs ) . Result
236
+ , TaskCreationOptions . LongRunning
237
+ ) ;
237
238
}
238
239
finally
239
240
{
240
241
this . _ResourceLock . Release ( ) ;
241
242
}
242
243
}
243
244
245
+ private Task < ConnectionStatus > CreateIterateTask ( HttpWebRequest request , string data , TaskCompletionSource < ConnectionStatus > tcs )
246
+ {
247
+ this . Iterate ( this . _AsyncSteps ( request , tcs , data ) , tcs ) ;
248
+ return tcs . Task ;
249
+ }
250
+
244
251
private IEnumerable < Task > _AsyncSteps ( HttpWebRequest request , TaskCompletionSource < ConnectionStatus > tcs , string data = null )
245
252
{
246
253
using ( var tracer = new ConnectionStatusTracer ( this . _ConnectionSettings . TraceEnabled ) )
0 commit comments