我在VS2010中使用我打算使用它的方式處理1.1.0.5版本的Booksleeve時遇到了困難。發生什麼事是在執行並等待操作之後,Booksleeve有時會使連接處於關閉狀態,因此下游操作會引發異常。書套過早關閉連接?
我遇到的最簡單的問題是:
static void Main(string[] args)
{
Func<RedisConnection> getNewRedisConnection =() =>
{
RedisConnection conn = new RedisConnection("Belasco");
conn.Error += (obj, eArgs) => { throw eArgs.Exception; };
return conn;
};
RedisConnection redisConn = null;
TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);
redisConn = getNewRedisConnection();
redisConn.Open();
var test1 = redisConn.Sets.GetAllString(0, "test1");
var testValues1 = test1.Result;
//var testValues1 = redisConn.Wait(test1);
var test2 = redisConn.Sets.GetAllString(0, "test2");
var testValues2 = test2.Result;
//var testValues2 = redisConn.Wait(test2);
redisConn.Close(false);
Console.WriteLine("Done");
Console.ReadKey();
}
static void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
throw new NotImplementedException();
}
var test2 = redisConn.Sets.GetAllString(0, "test2");
行拋出「隊列關閉」異常。
現在,如果我關閉並重新打開中間連接的請求,事情似乎工作。
var test1 = redisConn.Sets.GetAllString(0, "test1");
var testValues1 = test1.Result;
//var testValues1 = redisConn.Wait(test1);
redisConn.Close(false);
redisConn = getNewRedisConnection();
redisConn.Open();
var test2 = redisConn.Sets.GetAllString(0, "test2");
var testValues2 = test2.Result;
//var testValues2 = redisConn.Wait(test2);
但是,如果我執行「設置」操作,所有似乎都回到破碎。
redisConn = getNewRedisConnection();
redisConn.Open();
var test0 = redisConn.Sets.Add(0, "test1", new string[] { "11", "22", "33", "44", "55" });
redisConn.Wait(test0);
redisConn.Close(false);
redisConn = getNewRedisConnection();
redisConn.Open();
var test1 = redisConn.Sets.GetAllString(0, "test1");
var testValues1 = test1.Result;
//var testValues1 = redisConn.Wait(test1);
redisConn.Close(false);
redisConn = getNewRedisConnection();
redisConn.Open();
var test2 = redisConn.Sets.GetAllString(0, "test2");
var testValues2 = test2.Result;
//var testValues2 = redisConn.Wait(test2);
我也有交易相同的問題,但我覺得它源於同樣的問題。之所以我需要檢索值,然後排隊其他命令是因爲我後來的Redis操作是根據我返回的值確定的!
軟件包的更新似乎確定了這個問題。我原先使用https://code.google.com/p/booksleeve/downloads/list頁面下載。我在NuGet(1.3。*)中發現了當前的版本,並且工作很好。 – AniAko
@AniAko我不記得那裏有下載 - 我會刪除那個,ta –