前言
这篇文章简单说说C#中的协变和逆变。
在C#编程中,由于存在类型之间的强制转换,很容易会出现所谓的类型可变性说法,存在协变、逆变、不变三种。
Just So So ...
访问数据库可能要花一些时间。这里不应该阻塞用户界面。ADO.NET 类 通过异步方法和同步方法提供了基于任务的异步编程。下面的代码片段类似于上一个使用 SqlDataReader 的代码,但它使用了异步的方法调用。连接用SqlConnection.OpenAsync 打开,读取器从SqlCommand.ExecuteReaderAsync
方法中返回,记录使用SqIDataReader.ReadAsync 检索。在所有这些方法中,调用线程没有阻塞,但是可以在得到结果前,执行其他模作:
使用 FileSystemWatcher 可以监视文件的更改。事件在创建、重命名、删除和更改文件时触发。这可用于如下场景:需要对文件的变更做出反应,例如,服务器上传文件时,或文件缓存在内存中,而缓存需要在文件更改时失效。
因为 FileSystemWatcher 易于使用,所以下面直接开始一个示例。FileMonitor的示例代码利用以下名称空间:
与互斥和信号量对象一样,事件也是一个系统范围内的资源同步方法。为了从托管代码中使用系统事件,.NET Framework 在 System.Threading 名称空间中提供了ManualResetEvent、AutoResetEvent、ManualResetEventSlim 和 CountdownEvent 类。
对于同步,Barrier 类非常适用于其中工作有多个任务分支且以后又需要合并工作的情况。Barrier 类用于需要同步的参与者。激活一个任务时,就可以动态地添加其他参与者,例如,从父任务中创建子任务。参与者在继续之前,可以等待所有其他参与者完成其工作。