小编Dmi*_*hin的帖子

async一次等待一个任务

在我的求职面试中,我被赋予了一个任务,即通过一些长时间运行的方法创建一个异步包装器,处理一些数据,但要创建它,以便一次只能运行一个任务.我对async/await模式并不是很熟悉,所以我尽力而为,在任务风格和事件风格之间写了一些混合,以便我的包装器正在执行当前正在执行的任务,并公开公共方法和公共事件.方法将数据作为参数进行处理,如果没有任务正在运行,则启动一个任务,如果有任务,则将数据排入队列.任务在完成时提升了公共事件,即向订阅者发送流程结果并在有任何入队时开始新任务.

所以,正如你可能猜到的那样,我没有通过采访,但是现在我做了一些研究,我正在试图弄清楚如何正确地做它(它应该也是线程安全的,但我太忙了担心这一点).所以我的问题是,如果我有的话

public class SynchronousProcessor
{
    public string Process(string arg)
    {
        Thread.Sleep(1500); //Work imitation
        return someRandomString;
    }
}

public class AsynchronousWrapper
{
    SynchronousProcessor proc = new SynchronousProcessor();

    public async Task<string> ProcessAsync(string arg)
    {
        return Task.Run(() => proc.Process(arg));
    } 
}
Run Code Online (Sandbox Code Playgroud)

,或类似的东西,ProcessAsync(string)如果已经执行任务,如何正确处理调用?

c# multithreading asynchronous

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

IEqualityComparer对不同类型

鉴于两个班级

class Contract
{
    public int ID {get; set;}
    // . . . 
}

class DBContract
{
    public int FromID {get; set;}
    // . . . 
}
Run Code Online (Sandbox Code Playgroud)

还有两个IEnumerables

IEnumerable<Contract> ValidContracts = Application.GetContracts(//. . .
IEnumerable<DBContract> ExportedContracts = DBAdapter.GetRows(// . . .
Run Code Online (Sandbox Code Playgroud)

我需要找到theces IEnumerables的交集.但是,如果它只有一个类型参数,我该如何实现IEqualityComparer呢?

c# linq

4
推荐指数
2
解决办法
2050
查看次数

子类的唯一实体框架

我对如何在Entity Framework中处理这种情况感到困惑.

我有一个角色基类:

public class Character
{
    [Key]
    public Guid Id { get; set; }
    public Realm Realm { get; set; }
    public Guid RealmId { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

角色有名称并且必然属于领域.

由玩家控制的角色绝对是一个角色.它与玩家/用户绑定:

public class PlayerCharacter : Character
{        
    public User User { get; set; }
    public Guid UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

NPC也是一个角色:它不需要具有MCVE的任何属性

public class Npc : Character { }
Run Code Online (Sandbox Code Playgroud)

现在,显然,您不希望在同一领域中使用相同名称的字符,但是您可以Orcs在单个领域中拥有所需数量,因此我们需要定义唯一约束PlayerCharacter,例如通过.HasAlternateKey:

public DbSet<PlayerCharacter> Characters …
Run Code Online (Sandbox Code Playgroud)

c# asp.net entity-framework entity-framework-core

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