- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
至少可以说,Windows 商店应用程序令人沮丧;与常规 .net 足够接近就会惹上麻烦。
我在使用 Tasks、await 和 Socket.ConnectAsync 时遇到的问题。
我有以下代码:
public async Task<string> Connect(string hostName, int portNumber)
{
string result = string.Empty;
// Create DnsEndPoint. The hostName and port are passed in to this method.
DnsEndPoint hostEntry = new DnsEndPoint(hostName, portNumber);
// Create a stream-based, TCP socket using the InterNetwork Address Family.
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Create a SocketAsyncEventArgs object to be used in the connection request
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = hostEntry;
// Inline event handler for the Completed event.
// Note: This event handler was implemented inline in order to make this method self-contained.
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate (object s, SocketAsyncEventArgs e)
{
// Retrieve the result of this request
result = e.SocketError.ToString();
// Signal that the request is complete, unblocking the UI thread
_clientDone.Set();
});
// Sets the state of the event to nonsignaled, causing threads to block
_clientDone.Reset();
// Make an asynchronous Connect request over the socket
await _socket.ConnectAsync(socketEventArg);
// Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds.
// If no response comes back within this time then proceed
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
return result;
}
我开始在应用程序中添加 Async/await 以防止出现 UI 问题。但是当我进入这个函数并将 Await 添加到
await _socket.ConnectAsync(socketEventArg);
我得到错误:
错误 CS1929 'bool' 不包含 'GetAwaiter' 的定义,最佳扩展方法重载 'WindowsRuntimeSystemExtensions.GetAwaiter(IAsyncAction)' 需要类型为 'IAsyncAction' 的接收器
在查看 ConnectAsync 的文档时,看起来 ConnectAsync 应该支持 await...
不支持await吗?
最佳答案
不,ConnectAsync
不是 TAP method ,因此不能与 await
一起使用。
我对任何使用原始套接字的人的第一条建议是“不要”。如果可以,请使用 REST API(使用 HttpClient
)或 SignalR
API。原始套接字有很多陷阱。
如果您必须使用原始套接字(即,另一端正在使用自定义 TCP/IP 协议(protocol),而您无权修复这种情况),那么首先要注意的是是 Socket
类在一个类中具有三个完整的 API。
第一个是看似简单的同步 API (Connect
),我不推荐将其用于任何生产代码。第二种是标准的 APM 模式 (BeginConnect
/EndConnect
)。第三种是特定于Socket
类的专用异步模式(ConnectAsync
);这个专门的 API 使用起来比标准的异步 API 复杂得多,只有当您在受限环境中进行繁琐的套接字通信并且需要通过垃圾收集器减少对象流失时才有必要。
请注意,没有与 await
兼容的 API。我没有和微软的任何人谈过这件事,但我强烈怀疑他们只是认为 Socket
类已经有太多成员(3 个完整的 API;添加一个 await
-compatible 会添加第四个完整的 API),这就是为什么当他们将 TAP-pattern (await
-compatible) 成员添加到 BCL 中的其他类型时,它被跳过了。
要使用的正确 API(在 99.999% 的情况下很容易)是 APM API。你可以create your own TAP wrappers (which work with await
) by using TaskFactory.FromAsync
.我喜欢用扩展方法来做到这一点,就像这样:
public static Task ConnectTaskAsync(this Socket socket, EndPoint remoteEP)
{
return Task.Factory.FromAsync(socket.BeginConnect, socket.EndConnect, remoteEP, null);
}
然后您可以在 Socket
上的任何位置调用它,如下所示:
await _socket.ConnectTaskAsync(hostEntry);
关于c# - Windows 应用商店应用程序的 Socket.ConnectAsync 不喜欢 Async,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486638/
假设您有下表,名为 Likes: A|B --- a|b a|f a|e a|i b|a b|i c|d e|p 在此表中,A 中的值表示“喜欢”B 中的人。因此,a 喜欢 b,a 喜欢 f,a 喜欢
请访问此处观看直播https://ibnul.neocities.org/_temporary/au2pr4/like-dis-icon-active-effect.html 这里我有多个评论部分,每
我想要一个喜欢/不喜欢的超链接来在我的页面上显示不同的内容:当点击“喜欢”时,显示“好”;单击“不喜欢”时,显示“不好”。我的代码是这样的: function Homepage(){ t
我们已经建立了一个 Facebook Page Tab application用Like Gate .我们之前已经做过无数次了,在这方面,这个应用程序没有任何异常。 在我们的 ASP.Net 4.0
我正在尝试在我的页面上实现一个喜欢/不喜欢按钮。我设法让按钮工作(点击时它会变成喜欢,反之亦然),它还会在数据库表上创建或删除类似的东西。现在的问题是喜欢的计数器。它仅在我第一次单击按钮时有效,即如果
我想在我的 Android 应用程序中集成一个赞按钮。我用了代码 likeWebView = (WebView) findViewById( R.id.webView1 ); likeWebView
我有一个漫画网站,我希望用户可以为每部漫画和每件艺术品一次投票。 我的代码似乎有两个问题: 1) 我只希望一个用户每张图片投票一次...所以我想捕获他们的信息并将其存储在数据库中。我有一个 ON DU
我正在开发 web 应用程序,我必须像 facebook 那样实现“喜欢”系统。应用程序将包含客户可以“喜欢”的几类产品。所以我开始创建数据库,但遇到了一个障碍。据我了解,有两种方法可以做到这一点:
我需要一个 mysql 查询方面的帮助。我无法找到特定查询的解决方案。我什至不确定,如果 LIKE 运算符是我正在寻找的。 我想要实现的是,找到所有包含 url 的行,如果该 url 不是 foo.c
如何为 Like 编写动态 LINQ 方法条款。 供引用,有Dynamic LINQ OrderBy on IEnumerable / IQueryable .我正在寻找一个类似的动态 Like条款。
This question already has answers here: Cumulative number of unique values in a column up to current
我需要任何用户能够每 24 小时点赞一次 我为此写了一个函数 const LIKE_HEART = 'like_heart'; const LIKE_FINGER = 'like_finger'; p
让我在这里解释一下整个事情,以便您可以清楚地了解情况: 我在 Facebook 上有一个页面,这些见解(页面上的和来自图形 API 的)为我提供了很多有值(value)的信息,但我需要更深入。我正在考
给定这个脚本: DECLARE @token NVARCHAR(max) SET @token = 'mytexttosearchfor' SELECT * FROM myTable WHERE my
我怎样才能做一个Like-query,要搜索多个值? $searchWords = explode(' ', Input::get('search')); 然后我得到一组用于搜索的单词。 我怎样才能通
我正在尝试在页面上制作一个“赞”按钮,但似乎无法使其正常工作。基本上有三个函数使用ajax将数据发送到更新数据库的php页面。我已经检查了数据库并且所有三个更新都正确。如果用户最初不喜欢并单击,它会正
我有两张 table 在“用户”表中,每个用户都有一些技能。它们位于单个列上并连接在一起。在表“技能”上,每个技能都有一个关联的标签。 碰巧有些用户的技能不再在表“技能”中引用。 我想做的选择应该列出
所以我正在尝试设计一个数据库来跟踪观看次数、喜欢次数和下载次数。现在要跟踪的条目数量预计为 1m 或更多,所以通常我会每天跟踪每个条目,但对于 1m,我担心性能甚至可能是硬盘大小。 客户希望能够显示上
我像在 Firebase 事件数据库中一样实现了该系统。点赞计数器位于 EventModel -> likesInfo -> likesNumber 处。问题在于数据发散,例如,如果两个用户快速(0.
假设两个用户正在使用一个应用程序,并已授予该应用程序适当的权限来检索他们的点赞。是否可以使用 FQL 或图形 api 来查找他们的共同点?类似于如何使用图形 API 在两个用户之间找到共同的 frie
我是一名优秀的程序员,十分优秀!