هل تعمل HttpResponse في كتلة "باستخدام" مع من response.close صريحة ()
-
05-07-2019 - |
سؤال
وكنت أحاول الحصول على توضيحات بشأن هذا:
والطريقة-1:
Dim request = CreateRequest(uri) //some uri
Dim response = DirectCast(request.GetResponse, HttpWebResponse)
response.Close()
والطريقة 2:
Dim request = Createrequest(uri)
Using response = DirectCast(request.GetResponse, HttpWebResponse)
End Using
وعندما تستخدم على حد سواء أسلوب 1 وأسلوب-2 على آلة المحلية للاتصال والحصول على استجابة من جهاز X البعيد، وكلاهما يعمل بشكل صحيح.
وعندما تستخدم هذا الرمز على Y الجهاز عن بعد للحصول على رد من X، إلا أن الطريقة-1 يعمل، وأسلوب-2، وأنا على الحصول
System.Net.WebException: The operation has timed out
ما الفرق بين طرق المذكورة أعلاه وما قد يكون مشكلة محتملة؟
المحلول
وUsing
تترجم ببساطة إلى كتلة Try
/ Finally
التي تدعو .Dispose()
في كتلة Finally
. يمكنك استخدام العاكس لتجد كود يتم إنشاؤها. يمكنك أيضا استخدامه لنلقي نظرة على ما يفعله الأسلوب. في هذه الحالة، وطريقة Dispose()
على HttpWebResponse
لا <م> لا م> تفعل نفس Close()
وهو ما يعني أنه في الواقع الخلافات الدلالي هنا.
وUsing
عادة ما يكون له فائدة الإفراج عن الموارد المستخدمة من قبل كائن فورا عندما يخرج من نطاق. وهذا مفيد لأشياء مثل GDI + أو ملف مقابض، ولكن في حالة HttpWebResponse
أنها قد تكون مختلفة قليلا. لا يعرفون ما يكفي عن هذا الكائن معين من شأنه أن يكون تخميني أن Close()
ing ذلك لا يعفي حقا أي موارد، لذلك ليس هناك حاجة لDispose()
يدعو Close()
جدا. وربما هناك أسباب وجيهة لذلك السلوك.