小编Jak*_*ake的帖子

使用自定义任务工厂创建但不启动任务?

我希望能够在不启动它的情况下创建任务,类似于运行var a = new Task(); a.Start();但使用自定义工厂.工厂提供StartNew(),但我找不到一种方法来分开这两个行动.这可能吗?

c# task-parallel-library

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

删除导航属性不会更新数据库

我有2个POCO课程(如下),并希望删除他们的两个记录之间的链接.根据这个 EF 5.0应该能够处理删除而不加载User类,如下所示:

context.Computers.Find("test").User = null;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这不起作用,但使用.net 4批准的方法,它的工作原理:

en = context.Computers.Find("test");
context.Entry(en).Reference(e => e.User).Load();
en.User = null;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的EF参考是EntityFramework.dll版本5.0.0.0.我错过了一些明显的东西吗?

以下是课程:

public class Computer
{
    public string Id { get; set; }
    public Nullable<int> UserId { get; set; }
    public virtual User User { get; set; }
}
public class User
{
    public int Id { get; set; }
    public virtual ICollection<Computer> Computers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编辑:以下链接文章中的具体行似乎与我看到的功能不一致:

要删除关系,请将navigation属性设置为null.如果您正在使用基于.NET 4.0的实体框架,则需要在将其设置为null之前加载相关的结尾.例如:

context.Entry(course).Reference(c => c.Department).Load();
course.Department = null;
Run Code Online (Sandbox Code Playgroud)

从基于.NET 4.5的Entity …

entity-framework entity-framework-5

6
推荐指数
1
解决办法
2680
查看次数

如何安排任务以使它们不同时运行,包括异步延续

给定以下代码,是否可以为实例定义调度程序,创建和继续设置Task doThing

我希望能够安排多个实例,doThing以便它们实际上只从其他实例运行(即使它们正在等待其他子任务).

    private static async Task doThing(object i)
    {
        Console.WriteLine("in do thing {0}", (int)i);
        await Task.Delay(TimeSpan.FromSeconds(5));
        Console.WriteLine("out of do thing {0}", (int)i);
    }
    static void Main(string[] args)
    {

        CancellationTokenSource source = new CancellationTokenSource();
        ConcurrentExclusiveSchedulerPair pair = new ConcurrentExclusiveSchedulerPair(TaskScheduler.Current);

        Task Task1 = Task.Factory.StartNew((Func<object,Task>)doThing, 1, source.Token, TaskCreationOptions.AttachedToParent, pair.ExclusiveScheduler).Unwrap();
        Task Task2 = Task.Factory.StartNew((Func<object, Task>)doThing, 2, source.Token, TaskCreationOptions.AttachedToParent, pair.ExclusiveScheduler);
        Task Task3 = doThing(3);
        Task Task4 = Task.Factory.StartNew(async (i) =>
        {
            Console.WriteLine("in do thing {0}", (int)i);
            await Task.Delay(TimeSpan.FromSeconds(5));
            Console.WriteLine("out of …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library

0
推荐指数
1
解决办法
483
查看次数