Windows 8 Store App和Visual Studio 2012,如何停止loadasync()方法?

时间:2013-12-09 04:14:50

标签: c# windows multithreading visual-studio-2012 async-await

我制作了一款连接服务器以获得高分的游戏。它在第一个连接中工作正常(然后我关闭数据编写器/读取器,并且当连接应该一次性检索数据时,streamsocket)。 但在我尝试第二次连接后,我收到“InvalidOperationException未被用户代码处理”。在意外的时间调用了一个方法。

我使用以下模板进行客户端连接: StreamSocket sample

那么如何在此操作之后杀死线程池中的所有线程,因为我认为阻塞第二个连接的是什么?

这似乎是一个时间问题,因为如果我在loadasync方法上设置一个断点并逐步执行代码,它将在第二个连接上工作吗?

由于

    public async void ScoreUpdate(string input)
    {

        DataWriter writer = new DataWriter(socket.OutputStream);
        DataReader reader = new DataReader(socket.InputStream);

        string stringToSend = input;
        writer.WriteString(stringToSend);
        try
        {


            uint returnLength =  await writer.StoreAsync();
            uint sizeFieldCount = await reader.LoadAsync(4);

            if (sizeFieldCount != sizeof(uint))
            {
                // The underlying socket was closed before we were able to read the whole data.

                return;
            }

            uint stringLengthSize = reader.ReadUInt32();
            uint stringLength = await reader.LoadAsync((uint)stringLengthSize -4);
            UpdateScore = reader.ReadString(stringLength);

            socket.Dispose();
            socket = null;
        }
        catch (Exception exception)
        {
            // If this is an unknown status it means that the error if fatal and retry will likely fail.
            if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown)
            {
                throw;
            }
            socket.Dispose();
            socket = null;
        }
    }

}

0 个答案:

没有答案