इसमें रद्दीकरण टोकन पैरामीटर नहीं है। इसके अलावा HttpListenerContext संबंधित (प्रारंभ/समाप्ति) AcceptWebSocket विधियों से संबंधित नहीं है।HttpListenerContext.AcceptWebSocketAsync को कैसे रद्द करें?
उत्तर
शायद निम्न समाधान आपके मामले में बेहतर फिट बैठता है, जो इस article पर आधारित है।
रद्दीकरण टोकन ट्रिगर होने पर यह सुनना बंद कर देगा, फिर आप ऑपरेशन को रद्द करने के लिए कस्टम तर्क लागू करने में सक्षम हैं। मेरे मामले में लूप को तोड़ने के लिए पर्याप्त है, लेकिन यह वास्तव में आप चाहते हैं कि कुछ भी हो सकता है।
public void Stop()
{
this.Status = ServerStatus.Stopping;
this.listener.Stop();
this.cancellationTokenSource.Cancel();
this.Status = ServerStatus.Stopped;
}
private async void ListenForConnections(CancellationToken cancellationToken)
{
try
{
while (this.Status == ServerStatus.Running)
{
var socketTask = this.listener.AcceptSocketAsync();
var tcs = new TaskCompletionSource<bool>();
using (cancellationToken.Register(s => ((TaskCompletionSource<bool>)s).TrySetResult(true), tcs))
{
if (socketTask != await Task.WhenAny(socketTask, tcs.Task).ConfigureAwait(false))
break;
}
var context = new TcpContext(socketTask.Result);
this.OnConnectionReceived(context);
}
}
catch (ObjectDisposedException)
{
// Closed
}
}
सबसे अच्छा आप कर सकते हैं सुनना हिस्सा धागे में लपेटें और जब आप थ्रेड पर निष्पादित करना रद्द करना चाहते हैं।
ऑब्जेक्ट डिस्प्ले अपवाद को पकड़ने के लिए सुनिश्चित करें जो विधि में हो सकता है। निचले स्तर TcpListener के लिए एक ही बात थी।
public void Stop()
{
this.Status = ServerStatus.Stopping;
this.listener.Stop();
this.listeningThread.Abort();
this.Status = ServerStatus.Stopped;
}
/// <summary>
/// Listens for connections.
/// </summary>
private async void ListenForConnections()
{
try
{
while (this.Status == ServerStatus.Running)
{
var socket = await this.listener.AcceptSocketAsync();
var context = new TcpContext(socket);
this.OnConnectionReceived(context);
}
}
catch (ObjectDisposedException)
{
// Closed
}
}
हममम, आप HttpListener
जो अनुरोध करने के लिए सुन रहा है से संदर्भ प्राप्त (संदर्भ में ही बात नहीं है, यह केवल आप के लिए अनुरोध/प्रतिक्रियाओं लपेटता जहाँ तक मैं समझता हूँ)। मुझे लगता है कि आपको HttpListener.Stop()
पर कॉल करना चाहिए, क्या यह चाल चल जाएगा?
उत्तर की तरह दिखता है। मुझे चाहिए इसे देखने के लिए कुछ समय। –
@DenisGladkiy निश्चित बात, यदि संभव हो तो कृपया इस मामले पर टिप्पणी करें जब आप इसे चेक करते हैं। मैंने पूरी तरह से प्रलेखन पर मेरी धारणा आधारित है, 'एचटीपी लिस्टनर' और सामान्य ज्ञान के साथ मेरा अनुभव^-^यह अच्छा होगा पता है कि यह सही तरीका है (मैंने वेब सॉकेट के साथ काम नहीं किया)। –
वेब सॉकेट के अनुसार आरएफसी केवल एक चीज है जिसे AcceptSocketAsync shou एलडी डू कई HTTP शीर्षलेख भेजना है: "ठीक है, अब से वेबस्केट के माध्यम से बात करते हैं"। मैंने HttpListener के स्रोत खोले हैं और AcceptSocketAsync बिल्कुल यह कर रहा है। खराब एपीआई डिज़ाइन की तरह दिखता है: आंतरिक रूप से केवल एक एसिंक कॉल होता है और इसमें रद्दीकरण टोकन के साथ अधिभार होता है :( –
- 1. jquery.load() को कैसे रद्द करें?
- 2. UIWebView को कैसे रद्द करें?
- 3. प्रतिबद्धता को कैसे रद्द करें?
- 4. handler.post को रद्द कैसे करें?
- 5. लिनक्स, ब्लॉकिंग को रद्द करना रद्द करें()
- 6. प्रभाव: सिंक ऑपरेशन को कैसे रद्द करें?
- 7. एसिंक्रोनस कॉल को कैसे रद्द करें?
- 8. कोड में हैंडलर को कैसे रद्द करें?
- 9. Node.js vm: Script.runInNewContext() को कैसे रद्द करें?
- 10. स्प्रिंग टाइमर निष्पादन को कैसे रद्द करें
- 11. स्थगित MoveFileEx ऑपरेशन को कैसे रद्द करें?
- 12. आईईएक्स - मल्टीलाइन कमांड को कैसे रद्द करें?
- 13. कार्य की निरंतरता को कैसे रद्द करें?
- 14. एक AlertDialog.Builder को कैसे रद्द करें
- 15. एक fetch अनुरोध को कैसे रद्द करें?
- 16. आईओसी फ्रेमवर्क कार्यान्वयन को कैसे रद्द करें
- 17. जावा में Files.copy() को कैसे रद्द करें?
- 18. शाखा भविष्यवाणी को कैसे रद्द करें?
- 19. पृष्ठभूमि कार्यकर्ता को रद्द करें
- 20. रद्द करने के लिए रद्द करें टोकन
- 21. रेट्रोफिट 2 + आरएक्सजेवा रद्द/सदस्यता रद्द करें
- 22. रद्द करें बटन इंटरैक्शन को अक्षम कैसे करें?
- 23. ABPeoplePickerNavigationController रद्द करें बटन
- 24. JDialog रद्द करें बटन
- 25. AFNetworking 2.0 विशिष्ट कार्य को रद्द करें
- 26. वर्तमान UIScrollView स्पर्श को रद्द करें
- 27. रद्द करें NamedPipeClientStream.Read कॉल
- 28. UISearchBar रद्द करें बटन
- 29. UIAlertView रद्द करें बटनटन
- 30. रद्द करें बटन UISearchBar
आपके द्वारा ऑफ़र किया गया डिज़ाइन वेब सॉकेट पर लागू नहीं है, मुझे लगता है :(आपके मामले में, आप एक स्वीकार्य थ्रेड बना सकते हैं। लेकिन वेब सॉकेट HTTP कनेक्शन (टीसीपी सॉकेट पर) पर एक अमूर्त है: उस समय तक मेरे पास एक HttpListenerContext है जिसे टीसीपी कनेक्शन पहले ही बनाया गया है और "AcceptWebSocketAsync" वास्तव में HTTP पर हैंडशेक करता है, इसलिए इसे थ्रेड पर ऑफलोड नहीं किया जा सकता है (प्रति क्लाइंट एक थ्रेड स्केलेबल नहीं है) –