.NET Framework各個版本(4.5)

增加了兩個新關鍵字async和await它們可用於基於任務的異步模式(TAP)

什麼是基於任務的異步模式呢?

這就要說到.NET 4.0新增加的Task類型,它可以讓我們更加方便的進行多線程開發。它提供了很多方法像開啓任務(Start,Run方法等),延續任務(ContinueWith),等待任務(Wait,WaitAll,WaitAny),取消任務(CancellationToken),延遲執行(Delay),條件執行(WhenAll,WhenAny)等。

通常能夠使用async和await的方法總是返回Task<T>類型,下面的例子是Redis命令中一個判斷key是否存在的異步方法:

Task<bool> KeyExistsAsync(RedisKey key, CommandFlags flags = CommandFlags.None);

該方法返回的是一個Task<bool>類型,我是這樣封裝它的:

        /// <summary>
        /// 判斷Key是否存在
        /// </summary>
        /// <param name="key"></param>
        /// <param name="db"></param>
        /// <returns></returns>
        public async Task<bool> KeyExistsAsync(string key,int db)
        {
            return await RedisManager.ReadDataBase(db).KeyExistsAsync(key);
        }

最終調用的例子如下:

            RedisCommand command = new RedisCommand();
            var flag = command.KeyExistsAsync("city", 1).Result;

.NET 4.5 的另一個新特性是 Zip 壓縮改進,可減少壓縮文件的大小,進而可以減輕網絡帶寬的壓力,例子如下:

        /// <summary>
        /// 壓縮字節數組
        /// </summary>
        /// <param name="str"></param>
        public static byte[] Compress(byte[] inputBytes)
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
                {
                    zipStream.Write(inputBytes, 0, inputBytes.Length);
                    zipStream.Close(); //很重要,必須關閉,否則無法正確解壓
                    return outStream.ToArray();
                }
            }
        }

        /// <summary>
        /// 解壓縮字節數組
        /// </summary>
        /// <param name="str"></param>
        public static byte[] Decompress(byte[] inputBytes)
        {

            using (MemoryStream inputStream = new MemoryStream(inputBytes))
            {
                using (MemoryStream outStream = new MemoryStream())
                {
                    using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
                    {
                        zipStream.CopyTo(outStream);
                        zipStream.Close();
                        return outStream.ToArray();
                    }
                }

            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章