簡體   English   中英

C#UWP套接字:使用ReceiveAsync / SendAsync並在不關閉套接字的情況下處理超時

[英]C# UWP Socket: using ReceiveAsync / SendAsync and handling a timeout without closing the socket

我正在UWP平台上編寫類庫,該類庫將用於移動UWP應用程序。

該庫需要通過基於TCP的專有協議與外部設備進行通訊。 該協議要求接收或發送操作要等待確切的時間。

實際上,我已經使用ReceiveAsync和SendAsync實現了通信層,並為它們“等待” TPL模式指示。

在對參數進行大量閱讀之后,我發現無法自然地設置讀/寫操作的超時時間。 可以使用一些技巧來實現超時過程(例如:.WaitAny或超時令牌),但是我的所有閱讀使我明白了這一事實:

僅關閉套接字,才能中斷ReceiveAsync或SendAsync任務

我的問題是:這是真的嗎? 只能關閉/處置套接字才能阻止超時的接收/發送嗎?

如果是這樣,則由於我正在實施的協議不允許我數百次打開/關閉套接字,因此我需要恢復到實際處理正常超時的命令的同步接收/發送版本

我已經閱讀了很多有關參數的文章,並且對所寫的內容很確定,但是老實說,我希望有一種方法可以使用TPL模式處理超時,而無需關閉套接字...

謝謝。

我的問題是:這是真的嗎? 只能關閉/處置套接字才能阻止超時的接收/發送嗎?

對,那是正確的。 超時不適用於異步套接字方法。 取消現有異步讀/寫的正確方法是關閉套接字。

如果是這樣,則由於我正在實施的協議不允許我數百次打開/關閉套接字,因此我需要恢復到實際處理正常超時的命令的同步接收/發送版本。

我不同意。 協議定義中的超時僅是建議性的; 它們無法執行。 或者換種說法,它不必是字面上的接收或發送超時; 它可以是邏輯上的 “接收”或“發送”超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM