小编the*_*guy的帖子

从父子任务返回值

在下面的代码段中,任务使用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)

c# task-parallel-library

7
推荐指数
1
解决办法
574
查看次数

如何等待文件完全复制?

我有一个线程,轮询一个文件夹的新文件.问题是它看到了一个新文件,并且在文件被另一个进程完全复制之前就开始处理它.因此,轮询器获取另一个进程错误所使用的文件.

有没有办法检查文件是免费使用还是得到通知?我们当然可以使用异常处理代码,但是有更好的方法吗?

技术:.NET 2.0/C#

更新:

  • 从其他答案中发现,如果我们有权访问编写该文件的应用程序,那么更好的设计是从其他扩展名.tmp开始,然后在复制后重命名.

  • 如果我们不控制源应用程序,可以使用FileStream.Lock

.net c# file-io .net-2.0

5
推荐指数
1
解决办法
759
查看次数

坚持坚持MVVM模式?

我正在构建WPF应用程序并首次使用MVVM.整体使用MVVM非常有趣,其中一个主要好处是视图和模型类之间的良好分离.有些学科(至少是年轻的开发者)不要将它们混合在一起.

我们有一个场景,在确认消息框之后需要在按钮单击时关闭窗口.现在,这可以通过处理按钮单击事件并关闭Window类本身中的窗口来实现旧方法.或者我们可以通过在ViewModel中创建命令来实现MVVM方式,调用Window来显示消息框.etc.

我理解这里需要做什么,但我的问题是 - 是否有必要在所有情况下使用MVVM命令?是否有例外我们不应该使用命令,例如简单的UI操作?我们不是在这里过度使用MVVM吗?MVVM方式的所有好处到底是什么?

wpf mvvm

2
推荐指数
1
解决办法
175
查看次数

标签 统计

c# ×2

.net ×1

.net-2.0 ×1

file-io ×1

mvvm ×1

task-parallel-library ×1

wpf ×1