How to resolve deadlock in asynchronization code with async/await

Background

In .NET, there are currently three main asynchronous programming models: Asynchronous Programming Model (APM), Event-based Asynchronous Pattern (EAP) and Task-based Asynchronous Pattern (TAP). The TAP is the latest technology that is based on the Task and Task<T> types (available since .NET 4.0) in the System.Threading.Tasks namespace. Programmers can also use async/await keywords to improve the code readability since C# 5.0. There is a MSDN article explaining on the interop of the TAP model with previous asynchronous models. When programming in an asynchronous way, programmers need to be very careful of the deadlock. In this post, a common deadlock issue in TAP is explained and solutions are provided to avoid it in both production code and unit tests.

Problem

Here is the code-behind of a form. There is a button named button1 and a text box named textbox1 on the form. When the button is clicked, it runs a long time job that is sleeping for 2 seconds and shows a message in the text box then.

阅读全文 »

Oct17

在国外申请杭州机动车驾驶证(驾照)延期换证

官网说明

国内驾照马上到期,到杭州车管所网站上查过之后才知道,原来驾照可以申请延期换证(服务说明在这里)。具体需要的材料如下:

  1. 《机动车驾驶证申请表》
  2. 申请人的身份证明(原件和复印件)
  3. 延期事由证明(原件或复印件)
  4. 机动车驾驶证
  5. 申请人本人近期免冠,白色背景的1寸彩色正面相片一张。
  6. 代理人代办的,还要共同在上面《机动车驾驶证申请表》上签字。

这只是官方网站上的说明,如果人在国外,其实可以更简单。一下内容是电话咨询之后得到的答复。

网上申请方式

阅读全文 »

May18

.NET中检测当前程序为32位/64位以及调整

熟悉.NET开发的人都知道,在使用Visual Studio创建项目的时候,默认使用的编译配置选项为Any CPU,这意味着程序在32位机器上将使用32位进程;而在64位机器上将会自动运行在64位进程中。这也是.NET的强大之处,以最简单的方式同时支持32位以及64位系统,并且充分利用64位系统的优势。

那么,我们如何在代码中判断当前的程序正运行在32位还是64位进程中呢?最简单的方法就是通过: 阅读全文 »

Apr24

如何让Windows 8默认启动到传统桌面

在Windows 8以及Windows 8.1中,系统启动之后将会默认进入的新的开始界面。这一设定一直被人嘲讽,大家都希望能够回到以前的方式,开机能够默认进入到桌面环境以及恢复以前的开始菜单功能。

之前有爆料说四月份的更新将会恢复新的开始菜单以及提供选项让电脑在开机之后进入传统桌面环境,泄露的全新开始菜单如下图的样子。

泄漏的Windows 8开始菜单

泄漏的Windows 8开始菜单

可惜的是,在上周释出的更新中,并没有包含上面这个全新的开始菜单,而仅仅提供了“开机默认进入桌面”的选项,可以通过下面的方式开启: 阅读全文 »

Apr24

关于Google关闭Google Reader

每天都习惯性的打开Google Reader看些新闻什么的,那天打开时看到了弹窗“Google Reader将于2013年7月1日停止”服务。震惊+意外,如此好的产品居然说关就关了!我从2008年开始用GReader,已经五年了,除了QQ之外,很难想到还有别的什么产品能让我用这么久的。

GReader统计

自08年第一次用GReader到现在为止的统计

GReader的强大之处有很多,最值得提到的有下面几点:

  1. 所有订阅过的文章都有缓存,所以在GReader里面阅读不会受原始网站速度影响,只要你打开GReader快,那你打开所有的文章都一样快。
  2. 阅读之后文章缓存依然有效,以后也可以方便的查找,即使原始网站已经不存在。
  3. 使用HTTPS可以在兲朝无缝阅读任何资料,不需要怕墙。
  4. 异常便捷的快捷键,要是忘了的话,直接在键盘上按下“?”键,快捷键一目了然。
  5. 订阅任何的网站更新,即使网站没有输出RSS。(这个功能貌似早些时候已经移除)
  6. 其他RSS阅读器的基本功能就不用说了,肯定都有,而且更加简洁轻便。

最近很多评论文章都说Google已经不再是以前的Google了。不得不说,这次这一举动真的伤害到了非常多的谷粉,也让广大谷粉对Google的信任度下降了许多。就比如最近新出的Google Keep,说实话,我第一次看到这个东西的时候觉得这又是一个很不错的想法,很实用。但是我想到了他们关闭GReader,万一开始用GKeep后,很多信息当记录在此,哪天突然关闭了怎么办?这真的让我犹豫了一下,以前用Google的产品从来不会有任何的顾虑。其实当年Google+出来之后,把GReader中的Share/Like功能替换掉时已经遭很多人唾弃,但至少其他功能都依旧。现在可好,整个都要关了。Google,你真的伤到我了!

前两天切换到Feedly试用了一下,虽然也是一个挺不错的产品,但是哪能跟Google这样财大气粗,服务器没法比。大量GReader涌入之后,他们赶忙各种升级,但是依然无法让我感到满意。我自从用GReader以来,从来没让我等待过,都是打开即阅读,而Feedly目前还无法做到。不过,他们的态度是非常值得称赞的,迅速的响应用户需求,提供无缝迁移、增加投入、加快新功能开发、让用户投票推选想要的功能以及他们的效率都不得不让任何一个人赞许。因此,等GReader关闭的时候,我相信Feedly将会是我不二的选择,希望到时候你也会喜欢。

最后,虽然希望很渺茫,但还是希望Google能将Google Reader保留下来。

Mar26

用脚本批量删除文件

最近使用VS2010打开项目的时候会卡死,发现与恢复上一次打开的文档有关,只要把*.suo文件删除就能解决问题,所以有了下面的脚本:

关于这个脚本的说明:

  • 因为suo文件是隐藏的,所以在括号中如果直接使用 *.suo 的话讲找不到文件。
  • 使用DIR命令的/B格式可以文件罗列出来,加上/AH开关之后只会查找隐藏文件。
  • FOR命令的/F开关可以将IN后面的集合按行分段,就能将DIR命令得到的文件列表逐行分开成多个文件了。
  • 最后使用DEL命令将文件删除。

我的机器只有在开机之后第一次用VS打开工程时才会卡死,后面即使有 *.suo 文件也不会。不知道是我的插件缘故还是VS的Bug,有经验的朋友欢迎留言指教。

参考

更行 2013年3月25日

上面的脚本对于文件名中有空格的情况会有问题,建议使用下面的方式:

如果需要同时删除子文件夹中的文件,可以在DIR命令后面加上“/S”,如果想删除普通的文件而不是隐藏文件,只要把“/AH”删除即可。

Mar25

巴黎迪斯尼乐园的明星巡游(Magic Everywhere)

  1. 视频在1分38秒的时候转正
  2. 请无视我们的对话

[jwplayer mediaid=”15611″]

Dec16

Windows 8中的输入法切换

在Windows 8中,语言已经变成了比较自由、常用的选项。不同的输入法属于不同的语言下,比如我使用的系统是英语版的,在英语下无法添加中文的输入法,我必须添加一个简体中文的语言,然后在其下添加新的中文输入法,当需要切换输入法的时候,实际上是在切换语言。

切换语言

任务栏中切换语言

Win8中的语言选项

Win8中的语言选项

阅读全文 »

Sep10

IE10哪儿去了?

安装Win8之后,相信大家对IE10都印象非常深刻,完美的体现了Metro风格(现在该改口叫Windows 8风格了)。

Win8风格的IE10

但是在设置其他浏览器比如Chrome为默认浏览器之后,你就再也看不到Metro版的IE10了。这个可能和Win8里面App的概念有关。这时候,原先开始界面里的Chrome图标会有一些变化: 阅读全文 »

Sep10

印象 – 法国里昂

2012年9月3号下午13点(当地时间)到达法国里昂,对法国的印象做个记录。

  1. 入关非常的简单,一个问题都没有问过,把护照递给她,看了一眼就好了,从下飞机到出机场不到10分钟;
  2. 跟英国的乡村风光相差很大,这里有很多的高楼,不像英国,大部分都是排房;
  3. 公共交通很发达,轻轨+BUS就能去城市的大部分地方了,而且全部无人售票,自己自觉刷卡,不止一次看到有人从车尾挤到车头去刷卡;
  4. 道路都挺宽敞的,不像英国,开车那是技术活,:P;
  5. 很热,都9月份了,中午的时候还能到30度,上个星期在谢菲尔德的时候,已经要穿外套了;
  6. 从周一到周六,大部分商店下午5点就关门,餐馆晚上7点开始营业;
  7. 周日几乎所有的店面都不开门,路上的车也少了很多;
  8. 家乐福跟国内的大超市超级像,比如商品摆放模式、种类。最恐怖的是看见拔了皮的兔子,还有脑袋和眼睛的,巨恶!口味真重,还有很多英国超市买不到的东西,比如猪肚、猪头等等。
  9. 感觉物价挺高的,虽然欧元比人民币也有8块多,但是店里看到的价格数字都跟国内很接近。
  10. 会说英语的真不太多,大部分人说会一点点的,实际上是他几乎一句不会说,而且很多人是直接把法语翻译成英文,所以有些词很偏;
  11. 社会节奏不快,也有可能现在是夏天的缘故,大部分人都休假了。下午5点去了一趟学校,跟暑假里的下沙一样,人很少很少;
  12. 9月7号去办宽带,预约的安装时间居然到10月1号了。跟国内那种24小时内开通服务相比,真是。。。;
  13. 黑人很多。跟英国相反,这里的黑人都偏胖,反而是白人的身材都很好,不管男的女的;(PS:法国美女真多) 阅读全文 »

Sep10