在我的求职面试中,我被赋予了一个任务,即通过一些长时间运行的方法创建一个异步包装器,处理一些数据,但要创建它,以便一次只能运行一个任务.我对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)如果已经执行任务,如何正确处理调用?
鉴于两个班级
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呢?
我对如何在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)