你好,
有没有一种方法可以正确调试异步接口?
我正在调用由StackExchange.Redis提供的异步库函数StringGetAsync。它以字符串数组作为输入,并反馈RedisValue []数组,该数组实际上是byte []类型。
下面的程序返回一个null数组,并知道原因-将3个断点放在一个等待行上,一个放在Sleep上,将一个放在return语句上,执行第一个断点后,程序以0作为退出退出状态(可能成功),不允许检查第二个和第三个断点。有一个Add-to-Watch设置,带有表达式arryOfValuesReceived [0] .ToString()来观察返回的数组的各个元素,但是,程序在第一个断点之后退出。
我是否可以知道此行为的可能原因,或者是否有任何手段捕获并查看返回的数组以进行进一步调试?谢谢你
有没有一种方法可以正确调试异步接口?
我正在调用由StackExchange.Redis提供的异步库函数StringGetAsync。它以字符串数组作为输入,并反馈RedisValue []数组,该数组实际上是byte []类型。
下面的程序返回一个null数组,并知道原因-将3个断点放在一个等待行上,一个放在Sleep上,将一个放在return语句上,执行第一个断点后,程序以0作为退出退出状态(可能成功),不允许检查第二个和第三个断点。有一个Add-to-Watch设置,带有表达式arryOfValuesReceived [0] .ToString()来观察返回的数组的各个元素,但是,程序在第一个断点之后退出。
我是否可以知道此行为的可能原因,或者是否有任何手段捕获并查看返回的数组以进行进一步调试?谢谢你
C#:
private static async Task<RedisValue[]> GetMeValuesForMyKeys (DataTable table)
{
var batch = new List<RedisKey> (100);
for (i = 0; i<table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
batch.Add(row["keyColumn"].ToString () );
}
RedisValue[] arryOfValuesReceived = await db.StringGetAsync(batch.ToArray() );
Thread.Sleep(10000); // introduced to identify whether above or below statement is the rootcause, and it is noticed that above is the cause
return arryOfValuesReceived
}