系统全局资源使用
1. 定义全局资源文件 resource.resx
2. 定义 ResourceManager 实例, 用该实例获取全局资源
ResourceManager rm = new ResourceManager("WspSharedQueue.WspSharedQueue", Assembly.GetExecutingAssembly());
var timeout=rm.GetString("EnqueueTimeout");
3. 接口使用泛型
Interface IEquatable<T>
{
bool Equal(T obj);
}
接口实现
public class Car: IEquatable<Car>
{
public string Name{get;set;}
public string Model{get;set;}
public bool Equal(Car car)
{
if(car.Name==Name && car.Model==Model)
{
return true;
}
return false;
}
}
4. Func 与 Action
声明
Task.Factory.StartNew(Func<T> function).ContinueWith(Action<Task<TResult>> ContinuacteAction);
使用
Task.Factory.StartNew(()=>{doSomething; return t}).ContinueWith(t=>{}, TaskContionOptions.OnlyOnFaulted);
一个教科书般的Task, Timer应用
public static class TimerTaskFactory { private static readonly TimeSpan DoNotRepeat = TimeSpan.FromMilliseconds(-1); /// <summary> /// Starts a new task that will poll for a result using the specified function, and will be completed when it satisfied the specified condition. /// </summary> /// <typeparam name="T">The type of value that will be returned when the task completes.</typeparam> /// <param name="getResult">Function that will be used for polling.</param> /// <param name="isResultValid">Predicate that determines if the result is valid, or if it should continue polling</param> /// <param name="pollInterval">Polling interval.</param> /// <param name="timeout">The timeout interval.</param> /// <returns>The result returned by the specified function, or <see langword="null"/> if the result is not valid and the task times out.</returns> public static Task<T> StartNew<T>(Func<T> getResult, Func<T, bool> isResultValid, TimeSpan pollInterval, TimeSpan timeout) { Timer timer = null; TaskCompletionSource<T> taskCompletionSource = null; DateTime expirationTime = (timeout == TimeSpan.MaxValue ? DateTime.UtcNow : DateTime.UtcNow.Add(timeout)); timer = new Timer(_ => { try { if (timeout != TimeSpan.MaxValue && DateTime.UtcNow > expirationTime) { timer.Dispose(); taskCompletionSource.SetResult(default(T)); return; } var result = getResult(); if (isResultValid != null && isResultValid(result)) { timer.Dispose(); taskCompletionSource.SetResult(result); } else { // try again timer.Change(pollInterval, DoNotRepeat); } } catch (Exception e) { timer.Dispose(); taskCompletionSource.SetException(e); } }); taskCompletionSource = new TaskCompletionSource<T>(timer); timer.Change(pollInterval, DoNotRepeat); return taskCompletionSource.Task; } }
enum, struct 是值类型, 有默认值
多次使用+=加事件会导致多次调用回调函数.
每创建一个string对象就会分配一块内存. 如果有很多string对象很容易占用内存. 对于相同的string对象, 会放在字符串池中, 调用Equal返回true, 这是string类自身的实现, 不是说引用同一个地址.
引用类型私有变量和参数指向的是同一个地址,但是提升了参数的访问范围.
private List<string> flows;
public void SetFlows(List<string> flows)
{
this.flows=flows;
}