سؤال

وكنت أحاول الحصول على توضيحات بشأن هذا:

والطريقة-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() جدا. وربما هناك أسباب وجيهة لذلك السلوك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top