相关疑难解决方法(0)

如何在等待中取消任务?

我正在玩这些Windows 8 WinRT任务,我正在尝试使用下面的方法取消任务,并且它在某种程度上起作用.CancelNotification方法被调用,这使您认为任务已被取消,但在后台任务继续运行,然后在完成后,任务的状态始终完成且永不取消.有没有办法在取消任务时完全停止?

private async void TryTask()
{
    CancellationTokenSource source = new CancellationTokenSource();
    source.Token.Register(CancelNotification);
    source.CancelAfter(TimeSpan.FromSeconds(1));
    var task = Task<int>.Factory.StartNew(() => slowFunc(1, 2), source.Token);

    await task;            

    if (task.IsCompleted)
    {
        MessageDialog md = new MessageDialog(task.Result.ToString());
        await md.ShowAsync();
    }
    else
    {
        MessageDialog md = new MessageDialog("Uncompleted");
        await md.ShowAsync();
    }
}

private int slowFunc(int a, int b)
{
    string someString = string.Empty;
    for (int i = 0; i < 200000; i++)
    {
        someString += "a";
    }

    return a + b;
}

private void CancelNotification() …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library .net-4.5

147
推荐指数
4
解决办法
13万
查看次数

如何在Async Socket中处理超时?

我有一个代码,使用异步套接字向客户端发送消息并期待它的响应.如果客户端没有在指定的内部回复,则会考虑超时.Internet中的一些文章建议使用WaitOne,但这会阻塞线程并推迟使用I/O完成的目的.

在异步套接字中处理超时的最佳方法是什么?

 Sub OnSend(ByVal ar As IAsyncResult)
       Dim socket As Socket = CType(ar.AsyncState ,Socket)
       socket.EndSend(ar)

       socket.BeginReceive(Me.ReceiveBuffer, 0, Me.ReceiveBuffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnReceive), socket)

 End Sub
Run Code Online (Sandbox Code Playgroud)

.net sockets asynchronous asyncsocket

7
推荐指数
1
解决办法
2万
查看次数