- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下类试图充当简单的异步操作:
public class AsyncLineWriter
{
private delegate void SynchronousWriteLineDelegate(string message);
private SynchronousWriteLineDelegate DoWriteLine;
private void SynchronousWriteLine(string message)
{
Console.WriteLine(message);
}
public AsyncLineWriter()
{
DoWriteLine = new SynchronousWriteLineDelegate(SynchronousWriteLine);
public IAsyncResult BeginWriteLine(string message, AsyncCallback callback, object state)
{
return DoWriteLine.BeginInvoke(message,callback,state);
}
public void EndWriteLine(IAsyncResult asyncResult)
{
DoWriteLine.EndInvoke(asyncResult);
}
}
以下单元测试间歇性失败,但我不明白竞争条件在哪里:
[TestMethod]
public void Callback_is_called()
{
// Arrange
AsyncLineWriter lineWriter = new AsyncLineWriter();
object state = new object();
object callbackState = null;
AsyncCallback callback = (r) =>
{
callbackState = r.AsyncState;
};
// Act
IAsyncResult asyncResult = lineWriter.BeginWriteLine("test", callback, state);
lineWriter.EndWriteLine(asyncResult);
// Assert
Assert.AreSame(state, callbackState);
}
最佳答案
在此模式中,回调在线程池线程上运行,您应该从回调中调用 EndInvoke
。
EndInvoke
不等待回调完成(因为这会导致死锁),因此您在回调和测试方法之间进行竞争。
编辑:WAITING句柄也可以在回调完成之前设置。试试这个:
[TestMethod]
public void Callback_is_called()
{
// Arrange
var lw = new AsyncLineWriter();
object state = new object();
object callbackState = null;
var mre = new ManualResetEvent( false );
AsyncCallback callback = r =>
{
callbackState = r.AsyncState;
lw.EndWriteLine( r );
mre.Set();
};
// Act
var ar = lw.BeginWriteLine( "test", callback, state );
mre.WaitOne();
// Assert
Assert.AreSame( state, callbackState );
}
关于c# - 为什么这个 AsyncCallback 测试有时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756524/
我需要实现线程以缩短紧凑型框架应用程序的加载时间。我想启动一个后台线程来调用外部 API,而主线程缓存一些表单。后台线程完成后,我需要再触发两个线程来填充数据缓存。 我需要后台线程能够执行回调方法,所
我的申请中还有另一个问题。我在 MainActivity 中使用以下代码从我的 ContactAdapter 中获取用户数据: private List loadContactData() {
我目前有以下相关代码片段: public class MyEntryPoint implements EntryPoint { private boolean areFieldsEnabled
我正在通过 tcp 实现乒乓球。我有用 C# 编写的 Pinger。还有两只火锅。一个用 C# 编写,另一个用 C++ 编写。 Pinger 只是向 pongers 发送消息,pongers 回复他。
我想通过List进入AsyncCallback在函数中 LoadHistoryAsync(List Items)但是result.AsyncState在 CallForNewData(IAsyncRe
我需要使用异步委托(delegate)调用一个函数,当我浏览 AsyncCallback 的教程时,我看到异步回调定义如下: static void CallbackMethod(IAsyncResu
我最近注意到以下模式,但我没有完全掌握 CompletedSynchronously 属性的用法: IAsyncResult channelOpenResult = channel.BeginOpen
下面的代码是不言自明的,我的问题也很简单: 为什么 AsyncCallback 方法“HandleConnect”不向“Connect”方法传播异常 以及如何传播它? public void
在做我的应用程序时,我厌倦了总是在 asynccallback onfailure 中实现相同的默认错误处理(显示消息、catch.printstacktrace 等)。 我想知道您是否可以进行通用治
嗨,我有一段代码使用套接字连接到服务器 Try 'Connect To The Server Dim socketclient As New TcpClient Dim suc
我有一个数组 premisasObtenidas,我想用从 GWT AsyncCallback 获取的内容来更新它。该调用工作正常,并且 onSuccess 的代码执行,但是当我尝试将其返回的内容添加
我想使用 .NET-FTP 库 ( http://netftp.codeplex.com )。该库提供 BeginOpenRead(string,AsyncCallback,object) 以使用异步
我有一个类可以检查用户的操作、验证数据并调用 AsyncCallBack 以确定它是否是有效条目。我在两个地方使用了相同的逻辑,一个是用户单击“确定”,另一个是“输入”。通过在一种情况下调用 Asyn
我有一个 AsyncCallback 调用,它联系我的 GWT-RPC 服务并检索一些数据。我试图将该数据存储到一个类中,该类具有一个静态方法来存储查询结果。但是,我注意到数据没有填充到静态数据成员中
正是问题所说的。 我已阅读给定 here 的 MSDN 文章,并且(除非我是盲人),看不到任何明确证实这一点的地方。 为了提供更多范围,我主要指的是 Socket 类中提供的 Socket.Begin
我希望你能在以下方面帮助我: 我有一个 WebService 方法,它应该返回一个 CompensationPlanReturnReturn 对象数组。该方法是这样调用的: //This is the
我正在学习套接字编程,我有以下功能: public void OnDataReceived(IAsyncResult asyn) 回调是这样设置的: pfnWorkerCallBack = new A
我写了一个 HttpListener 监听其中一个端口: httpListener.BeginGetContext(new AsyncCallback(ListenerCallback), httpL
我有以下类试图充当简单的异步操作: public class AsyncLineWriter { private delegate void SynchronousWriteLineDeleg
我有一个 Stream 对象,我正在使用 BeginRead 开始(显然)读入缓冲区;读取完成后调用 AsyncCallback 函数。在此函数中,我可以检查用户是否想要获取下一个“ block ”并
我是一名优秀的程序员,十分优秀!