C#学习日记9

1.mscorlib.dll
解析:多语言标准通用对象运行时库[Microsoft Standard Common Object Runtime Library]。

2.异步和多线程
解析:
[1]异步是线程的一种应用,多线程也是线程的一种应用。
[2]异步不仅不是多线程,同时异步也不一定会使用多线程。

3.Task.Wait()
解析:
[1]Task.Wait()是一个同步方法,用于多线程中阻塞等待,不是实现同步方法中调用异步方法的实现方式。
[2]Task是Thread的子集,继承了Wait方法,但这个方法不是给异步用的。

4.int result = await f;
解析:如果没有完成,则程序将继续执行这个方法直到得到结果。然后再执行这个函数后面的代码。

5.同步方法中调用异步
解析:func1().GetAwaiter().GetResult();

6.C#异步编程
解析:
[1]C#中,异步编程,一个核心,两个关键字。
[2]一个核心是指Task和Task<T>对象,而两个关键字,就是async和await。

7.异步编程–单线程模式
解析:

Task<string> GetHtmlAsync()
{
  var client = new HttpClient();
  var gettask = client.GetStringAsync("https://home.cnblogs.com/u/tiger-wang");

  return await gettask;
}

这种方式不额外占用线程池资源,也不需要考虑多线程开发中线程锁定、数据一致性等问题。因为线程没有切换,所以也不存在上下文切换的问题。

8.异步编程–多线程模式
解析:

Task<string> GetHtmlAsync()
{
  var gettask = Task.Run(() => {
    var client = new HttpClient();
    return client.GetStringAsync("https://home.cnblogs.com/u/tiger-wang");
  });

  return await gettask;
}

Task.Run的内部代码会占用线程池资源,并在一个可用的线程上与主线程并行运行。

9.异步额外状态–取消
解析:

CancellationTokenSource source = new CancellationTokenSource();
CancellationToken cancel_token = source.Token;
await ActionAsync(para, cancel_token);
source.Cancel();

10.异步额外状态–进度
解析:

public class Progress<T> : IProgress<T>  
{  
    public Progress();  
    public Progress(Action<T> handler);  
    protected virtual void OnReport(T value);  
    public event EventHandler<T> ProgressChanged;  
}

IProgress<T>通过回调来发送进度值,引发捕获并处理。

11.线程同步
解析:线程之间采用互斥或者信号量等方式进行同步。
在这里插入图片描述

12.Task本质
解析:Task是一个所谓的调度单位,每个异步任务被封装为一个Task在CLR中被调度,而Task本身会运行在CLR中的预先分配好的线程池中。

13.await必须配合Task/ValueTask才能用吗
解析:在C#中只要类中包含GetAwaiter()方法和bool IsCompleted属性,并且GetAwaiter()返回的东西包含一个GetResult()方法、一个bool IsCompleted属性和实现了INotifyCompletion,那么这个类的对象就是可以await的。
说明:CLR:https://github.com/dotnet/runtime

14.托管代码和非托管代码
解析: 托管代码和非托管代码

15.C#判断List集合是否为空
解析:
[1]当集合是来自不确定个数的IEnumerable<T>时,使用Any()。
[2]当集合是来自外部数据[LINQ to SQL、LINQ to Entities]时,使用Any()。
[3]当集合是来自.NET Framework内建的集合时,使用Count()。

16.IWebDriver
解析:浏览器驱动接口,所有的关于浏览器的操作都可以通过此接口进行,不同浏览器有不同的实现类,比如IE浏览器[InternetExplorerDriver]、Chrome浏览器[ChromeDriver]等。

17.BackgroundWorker
解析:后台工作线程,区别于主线程,通过事件触发不同的状态。

18.log4net
解析:主要用于日志的记录和存储,采用log4net进行日志记录,便于过程跟踪和问题排查。

19.C#获取路径
解析:
[1]获取程序的基目录
System.AppDomain.CurrentDomain.BaseDirectory
[2]获取模块的完整路径
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
[3]获取和设置当前目录[该进程从中启动的目录]的完全限定目录
System.Environment.CurrentDirectory
[4]获取应用程序的当前工作目录
System.IO.Directory.GetCurrentDirectory()
[5]获取和设置包括该应用程序的目录的名称。
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
[6]获取启动了应用程序的可执行文件的路径
System.Windows.Forms.Application.StartupPath
[7]获取启动了应用程序的可执行文件的路径及文件名
System.Windows.Forms.Application.ExecutablePath
C#获取路径的相关方法,如下所示:

Assembly.GetEntryAssembly().Location
Assembly.GetAssembly().Location
Assembly.GetCallingAssembly().Location
Assembly.GetExecutingAssembly().Location

20.AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath区别
解析:
[1]AppDomain.CurrentDomain.BaseDirectory返回结果为D:\xxx\,而Application.StartupPath返回结果为D:\xxx
[2]Application.StartupPath只能用于WinForm窗体中,而AppDomain.CurrentDomain.BaseDirectory既可以用于WinForm窗体中,也可以用于类库DLL文件中。

21.PSD文件
解析:psd格式[Photoshop Document]的文件是一种图形文件格式,因此使用看图软件如ACDSee或图形处理软件如我形我速、PhotoShop等都可以打开的。

22.System.Environment.Exit
解析:
[1]System.Environment.Exit(1)程序非正常运行导致退
[2]System.Environment.Exit(0)程序正常运行退出

23.代理过程
解析:
[1]生成自定义代理类
delegate int MyDelegate();
[2]用New运算符实例化代理类
MyDelegate d = new MyDelegate(MyClass.MyMethod);
[3]最后通过实例对象调用方法
int ret = d();
[4]在程序中像调用方法一样应用代理的实例对象调用它指向的方法
delegate int d(int I);
说明:在C#中,一个类可以继承一个基类,但是可以实现多个接口。

24.SequenceEqual集合相等
解析:SequenceEqual扩展方法用于比较集合系列各个相同位置的元素是否相等。如下所示:

int[] a = new int[] {1, 2, 3};
int[] b = new int[] {1, 2, 3};
int[] c = new int[] {1, 3, 2};
bool result1 = a.SequenceEqual(b); // true
bool result2 = a.SequenceEqual(c); // false

25.C#5种可访问性类型
解析:
[1]public:成员可以从任何代码访问。
[2]protected:成员只能从派生类访问。
[3]internal:成员只能从同一程序集的内部访问。
[4]protectedinternal:成员只能从同一程序集内的派生类访问。
[5]private:成员只能在当前类的内部访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP工程化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值