小编Alm*_*ato的帖子

TransactionScope优先级(摆脱死锁情况)

我有一个每5分钟运行一次的进程A,需要在表"EventLog"中写一些东西.这整天都在工作,但是在晚上还有另一个进程B开始需要从该表中删除大量旧数据.该表有数百万行(包括blob)和许多相关表(通过级联删除),因此进程B最多运行约45分钟.当进程B运行时,我得到了很多进程A的死锁警告,我想摆脱这些.

简单的选择是"当进程B运行时不要运行进程A"但必须有更好的方法.我在两个进程中都使用EntityFramework 6和TransactionScope.我没有找到如何在我的进程中设置优先级或类似的东西.这可能吗?

编辑: 我忘了说我已经在每条记录使用一个删除事务,而不是所有记录都使用一个事务.在内部循环中,我创建了新的DBContext和TransactionScope,因此每条记录都有自己的事务.我的问题是删除记录仍然需要一些时间,因为相关的BLOB和其他相关表中的数据(假设每行大约5秒).当删除进程(B)与插入进程(A)交叉时,我仍然遇到死锁情况.

c# deadlock entity-framework transactionscope

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

有关C#中System.IO.File.Copy和copy,xcopy,robocopy命令的一些问题

我的C#Windows服务应用程序通过SMB,FTP或SSH整天通过网络复制大量文件.要做文件副本,我只需使用System.IO.File.Copy..NET Framework在这里执行哪个命令?是复制吗?也许xcopy?这在不同的Windows版本上有所不同吗?我还读到了robocopy,但似乎没有API.是否值得使用P/Invoke与xcopyrobocopy而不是简单的副本?目前我对我的情况表示怀疑.

在将来的版本中,我必须将所有文件复制到两个远程目录而不是一个.那么当我通过复制文件时会发生什么

File.Copy("c:\ test.txt","\\ server1\dir1\test.txt")

然后打电话

File.Copy("\\ server1\dir1\test.txt","\\ server1\dir2\test.txt")

文件是否会从我的服务器复制两次到目标服务器?据我所知,我的电脑说将文件从A复制到B,所以文件将从A转移到我的机器到B,对吗?

c# copy xcopy file robocopy

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

在同步操作上使用async/await(主要是留在UI线程上)

我正在尝试异步运行一些东西.这是我的代码:

    private async void SearchButton_Click(object sender, EventArgs e)
    {
         await Search();
    }

    // Inside search there is no async operation
    public Task Search()
    {
        // search for data in DB
        // update DataGridView and other elements on UI

        // How to return null/void/nothing?
        return ???;
    }
Run Code Online (Sandbox Code Playgroud)

等待同步方法是非法/不良做法Search()吗?我知道我可以使用Task.Run(Search)而不是然后Search()将在另一个线程(不是在UI线程)上执行,我必须经常Invoke()在里面使用Search().

我将Search()方法的返回值从'void'更改为'Task',所以它等待但是我必须返回什么?

c# task async-await

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