小编And*_*age的帖子

MySQL并发插入导致(显式)事务之外的死锁

我试图调试以下场景:有2个并发进程,将完全相同的行插入具有唯一约束的表中.这是在显式事务之外完成的(虽然我假设InnoDB将其作为单个语句处理内部自动提交?)

架构如下:

CREATE TABLE locks (
    id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    lock_uid varchar(255) NOT NULL,
    count smallint(6) NOT NULL,
    processor_id varchar(255) DEFAULT NULL,
    created_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    updated_at timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (id),
    UNIQUE INDEX locks_lock_uid_unique (lock_uid)
)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样lock_uid,在表中存在唯一的索引以防止具有相同值的多个行.

正在运行的命令(对于上下文,这些是从通用查询日志中获取以获得完整的健全性,在collat​​ion命令之外的任一线程上都没有其他语句):

线程1:

insert into `locks` (`lock_uid`, `count`, `processor_id`, `created_at`, `updated_at`) 
values ('11161567', '0', NULL, '2017-11-07 10:46:36', '2017-11-07 10:46:36')
Run Code Online (Sandbox Code Playgroud)

线程2:

insert into `locks` (`lock_uid`, `count`, `processor_id`, `created_at`, `updated_at`) 
values ('11161567', '0', NULL, …
Run Code Online (Sandbox Code Playgroud)

mysql deadlock

8
推荐指数
2
解决办法
896
查看次数

Html.TextBoxFor NullReferenceException 使用 Razor 语法

我有一个非常简单的页面(我已将其减少到几乎没有内容,以查看是否可以使其正常工作)。使用Html.TextBoxFor如下所示的 lambda调用时抛出 NullReferenceException 。我想弄清楚这是为什么?

异常本身似乎已被处理,因为它不会停止呈现页面,但我认为它根本不应该发生?文本框实际上按预期正确呈现(使用正则表达式和占位符)。

如果我换TextBoxForPasswordFor一个 NullReferenceException 也不会抛出。

看法:

@model Analytics.Sites.Frontend.Models.RegisterViewModel
<div>
    @using (Html.BeginForm("Register", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "centeralign", role = "form" }))
    {
        @Html.TextBoxFor(m => m.Email, new { @placeholder = "email@address.com" })
    }

</div>
Run Code Online (Sandbox Code Playgroud)

视图模型

public class RegisterViewModel
{
    [Required]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [RegularExpression(@"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", ErrorMessage = "The email address you entered is not valid.")]
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

例外:

System.NullReferenceException …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc razor

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

等待事件处理程序的异步

我很困惑如何最好地处理这种情况.我不想等待异步调用的响应.具体来说,我有:

public async Task<IApiData> FetchQueuedApiAsync(TimeSpan receiveTimeout)
{
    var message = await Task.Factory.FromAsync<Message>(
        ReadQueue.BeginReceive(receiveTimeout), ReadQueue.EndReceive);
    return message.Body as IApiData;
 }
Run Code Online (Sandbox Code Playgroud)

这按预期工作.但是,如果超时到期,则不得调用ReadQueue.EndReceive,否则将引发异常.显然,FromAsync并不知道这一点并盲目地调用它 - 解雇异常.不要在超时时调用EndReceive的要求由MSMQ实现,超出了我的控制范围.

当消息准备就绪或发生超时时,队列会公开事件.这是您通常检查消息是否存在的地方,然后根据文档调用EndReceive.标准听众......

ReadQueue.ReceiveCompleted += ReadQueue_ReceiveCompleted;
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不明白如何做到这一点,仍然有这样的等待(即我希望能够等待我现在,但通过委托处理它).那有意义吗?

c# asynchronous msmq

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

泛型方法的类型返回值

在我看来,我应该能够做到这一点?但我不能.

public Dictionary<Type, List<ParserRuleContext>> Contexts { get; private set; }

public IEnumerable<T> GetAllContextsOfType<T>() where T:ParserRuleContext
{
    return (List<T>)Contexts[typeof(T)];
}
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

Cannot convert type 'System.Collections.Generic.List<ParserRuleContext>' 
to 'System.Collections.Generic.List<T>'
Run Code Online (Sandbox Code Playgroud)

鉴于List被子句限制为List <ParserRuleContext>,我不明白这个?

c# generics

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

MySQL无法从现有表中进行选择,因为它不存在?

我不知道发生了什么事.我有一张叫做的桌子project_share_invite.几个小时前(在我们的生产环境中)我不能再对这个表发出SELECT.MySQL声称该表不存在,尽管它显示在上面show tables.今天在机器上发生的唯一值得注意的事件是例行程序包升级(通过apt).

mysql> use analytics;
Database changed

mysql> show tables like 'project_share_invite';
+--------------------------------------------+
| Tables_in_analytics (project_share_invite) |
+--------------------------------------------+
| project_share_invite                       |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select count(*) from project_share_invite;
ERROR 1146 (42S02): Table 'analytics.project_share_invite' doesn't exist
Run Code Online (Sandbox Code Playgroud)

想法?这对我没有任何意义.

更新:表的文件仍然存在于磁盘上(project_share_invite.frmproject_share_invite.idb分别)并且其中包含内容.

MySQL的快速重启并没有解决这个问题.

更新:使用root帐户而不是特定用户帐户时的结果相同.

更新:我也无法重新创建表.

CREATE TABLE `analytics`.`project_share_invite` ( ... )
ERROR 1146 (42S02): Table 'analytics.project_share_invite' doesn't exist
Run Code Online (Sandbox Code Playgroud)

更新:应该先检查错误日志:

InnoDB: Load table 'analytics/project_share_invite' failed, the table has missing foreign key indexes. 
Run Code Online (Sandbox Code Playgroud)

虽然我不知道它是如何在这种状态下得到的.

mysql

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

标签 统计

c# ×3

mysql ×2

asp.net ×1

asp.net-mvc ×1

asynchronous ×1

deadlock ×1

generics ×1

msmq ×1

razor ×1