[System] WebClient async request on file streams. Fixes #46538
authorMarek Safar <marek.safar@gmail.com>
Sun, 20 Nov 2016 10:34:26 +0000 (11:34 +0100)
committerMarek Safar <marek.safar@gmail.com>
Sun, 20 Nov 2016 10:35:51 +0000 (11:35 +0100)
mcs/class/System/Test/System.Net/WebClientTest.cs
mcs/class/referencesource/System/net/System/Net/webclient.cs

index 30531be7e880c09a3d69330be30fbc807154b7dc..d1f3180a2262510893243deb3f543919d6fe35b0 100644 (file)
@@ -438,6 +438,17 @@ namespace MonoTests.System.Net
                        }
                }
 
+               [Test]
+               public void OpenReadTaskAsyncOnFile ()
+               {
+                       var tmp = Path.GetTempFileName ();
+                       string url = "file://" + tmp;
+
+                       var client = new WebClient ();
+                       var task = client.OpenReadTaskAsync (url);
+                       Assert.IsTrue (task.Wait (2000));
+               }
+
                [Test] // OpenWrite (string)
                public void OpenWrite1_Address_Null ()
                {
index 510d7922bc73d878c8ae327beff78ae60ae00458..9b21455fab7d4b5d905b6167de2b163b44537069 100644 (file)
@@ -1806,12 +1806,19 @@ namespace System.Net {
         }
         private void OpenReadAsyncCallback(IAsyncResult result) {
 #if MONO
-            var lazyAsyncResult = (WebAsyncResult) result;
+            // It can be removed when we are full referencesource
+            AsyncOperation asyncOp = (AsyncOperation) result.AsyncState;
+            WebRequest request;
+            if (result is WebAsyncResult) {
+                request = (WebRequest) ((WebAsyncResult) result).AsyncObject;
+            } else {
+                request = (WebRequest) ((LazyAsyncResult) result).AsyncObject;
+            }
 #else
             LazyAsyncResult lazyAsyncResult = (LazyAsyncResult) result;
-#endif
             AsyncOperation asyncOp = (AsyncOperation) lazyAsyncResult.AsyncState;
             WebRequest request = (WebRequest) lazyAsyncResult.AsyncObject;
+#endif
             Stream stream = null;
             Exception exception = null;
             try {