在下面的代码段中,任务使用TaskCreationOptions.AttachedToParent创建两个子任务,这意味着父任务将等待子任务完成.
问题是 - 为什么父任务没有返回正确的值[102]?它首先确定其返回值,然后等待子任务完成.如果是这样,那么创建亲子关系有什么意义呢?
void Main()
{
Console.WriteLine ("Main start.");
int i = 100;
Task<int> t1 = new Task<int>(()=>
{
Console.WriteLine ("In parent start");
Task c1 = Task.Factory.StartNew(() => {
Thread.Sleep(1000);
Interlocked.Increment(ref i);
Console.WriteLine ("In child 1:" + i);
}, TaskCreationOptions.AttachedToParent);
Task c2 = Task.Factory.StartNew(() => {
Thread.Sleep(2000);
Interlocked.Increment(ref i);
Console.WriteLine ("In child 2:" + i);
}, TaskCreationOptions.AttachedToParent );
Console.WriteLine ("In parent end");
return i;
});
t1.Start();
Console.WriteLine ("Calling Result.");
Console.WriteLine (t1.Result);
Console.WriteLine ("Main end.");
}
Run Code Online (Sandbox Code Playgroud)
输出:
Main start.
Calling …Run Code Online (Sandbox Code Playgroud) 我有一个线程,轮询一个文件夹的新文件.问题是它看到了一个新文件,并且在文件被另一个进程完全复制之前就开始处理它.因此,轮询器获取另一个进程错误所使用的文件.
有没有办法检查文件是免费使用还是得到通知?我们当然可以使用异常处理代码,但是有更好的方法吗?
技术:.NET 2.0/C#
更新:
从其他答案中发现,如果我们有权访问编写该文件的应用程序,那么更好的设计是从其他扩展名.tmp开始,然后在复制后重命名.
如果我们不控制源应用程序,可以使用FileStream.Lock
我正在构建WPF应用程序并首次使用MVVM.整体使用MVVM非常有趣,其中一个主要好处是视图和模型类之间的良好分离.有些学科(至少是年轻的开发者)不要将它们混合在一起.
我们有一个场景,在确认消息框之后需要在按钮单击时关闭窗口.现在,这可以通过处理按钮单击事件并关闭Window类本身中的窗口来实现旧方法.或者我们可以通过在ViewModel中创建命令来实现MVVM方式,调用Window来显示消息框.etc.
我理解这里需要做什么,但我的问题是 - 是否有必要在所有情况下使用MVVM命令?是否有例外我们不应该使用命令,例如简单的UI操作?我们不是在这里过度使用MVVM吗?MVVM方式的所有好处到底是什么?