相关疑难解决方法(0)

C#将Lambda表达式作为方法参数传递

我有一个lambda表达式,我希望能够传递并重用.这是代码:

public List<IJob> getJobs(/* i want to pass the lambda expr in here */) {
  using (SqlConnection connection = new SqlConnection(getConnectionString())) {
    connection.Open();
    return connection.Query<FullTimeJob, Student, FullTimeJob>(sql, 
      (job, student) => {         
        job.Student = student;
        job.StudentId = student.Id;
        return job;
        },
        splitOn: "user_id",
        param: parameters).ToList<IJob>();   
  }   
Run Code Online (Sandbox Code Playgroud)

这里的关键是,我希望能够将我在这里使用的lambda表达式传递给调用此代码的方法,因此我可以重用它.lambda表达式是我的.Query方法中的第二个参数.我假设我想要使用Action或Func,但我不太确定它的语法是什么或它是如何工作的.有人可以举个例子吗?

c# linq lambda

94
推荐指数
4
解决办法
15万
查看次数

在c#4.0中执行fire and forget方法的最简单方法

我真的很喜欢这个问题:

在C#中执行fire and forget方法的最简单方法是什么?

我只是想知道,现在我们在C#4.0中有并行扩展,是否有更好的更简洁的方法来使用并行linq进行Fire&Forget?

.net c# .net-4.0 task-parallel-library fire-and-forget

86
推荐指数
4
解决办法
5万
查看次数

运行由ASP.NET网页请求触发的异步操作

我有一个异步操作,由于各种原因需要使用对ASP.NET网页的HTTP调用来触发.当我的页面被请求时,它应该开始此操作并立即向客户端返回确认.

此方法也通过WCF Web服务公开,并且完美地运行.

在我第一次尝试时,抛出异常,告诉我:

Asynchronous operations are not allowed in this context.
Page starting an asynchronous operation has to have the Async
attribute set to true and an asynchronous operation can only be
started on a page prior to PreRenderComplete event.

所以我当然把Async="true"参数添加到@Page指令中.现在,我没有收到错误,但页面阻塞,直到异步操作完成.

如何让真正的"即发即弃"页面正常工作?

编辑: 一些代码以获取更多信息.它比这复杂一点,但我试图在那里得到一般的想法.

public partial class SendMessagePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string message = Request.QueryString["Message"];
        string clientId = Request.QueryString["ClientId"];

        AsyncMessageSender sender = new AsyncMessageSender(clientId, message);
        sender.Start();

        Response.Write("Success");
    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asynchronous

53
推荐指数
3
解决办法
6万
查看次数

Async/Await使用Task.Run异步启动新线程吗?

我已经阅读了很多文章,但仍然无法理解这一部分.

考虑以下代码:

    private async void button1_Click(object sender, EventArgs e)
    {
        await Dosomething();
    }

    private async Task<string> Dosomething()
    {
        await Task.Run((() => "Do Work"));
        return "I am done";
    }
Run Code Online (Sandbox Code Playgroud)

第一个问题:

当我单击按钮时,它将调用DoSomething并等待通过调用Task.Run(如果我没有记错)从线程池创建线程的任务,并且所有这些都是异步运行的.所以我实现了创建一个完成我的工作但是异步执行的线程?但是考虑到我不需要任何结果,我只是希望在没有得到任何结果的情况下完成工作,是否真的需要使用async/await,如果是这样,怎么样?

第二个问题:

在异步运行线程时,它是如何工作的?它是在主UI上运行但是在单独的线程上运行还是在单独的线程上运行并且在该方法中是异步的?

c# multithreading async-await

35
推荐指数
3
解决办法
4万
查看次数

.net框架是否提供了使用文件系统的异步方法?

请问.NET框架的async内置库/组件,它可以与文件系统的工作(例如File.ReadAllBytes,File.WriteAllBytes)?

还是我用我自己写的库async的方法StreamReaderStreamWriter

像这样的东西会很不错:

var bytes = await File.ReadAllBytes("my-file.whatever");
Run Code Online (Sandbox Code Playgroud)

c# filesystems asynchronous async-await system.io.file

28
推荐指数
4
解决办法
1万
查看次数

Web Api - 火与忘记

我有一个Web API的操作,我需要运行一些任务而忘记这个任务.这就是我的方法现在的组织方式:

public async Task<SomeType> DoSth()
{
    await Task.Run(...);
    .....
    //Do some other work
}
Run Code Online (Sandbox Code Playgroud)

事情是,显然它停在等待线等待它完成后才继续工作.我需要"解雇并忘记"我是否应该在没有任何异步等待的情况下调用Task.Run()?

c# rest task-parallel-library asp.net-web-api

26
推荐指数
5
解决办法
2万
查看次数

如何异步删除文件夹

我有一个运行的Windows服务,从网络驱动器中删除文件夹.我想删除异步.如何才能做到这一点?

现在我循环遍历目录并调用

Directory.Delete(fullPath, true);
Run Code Online (Sandbox Code Playgroud)

谢谢

c# asynchronous c#-4.0

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

ASP.NET WebApi中的Fire-forget和单向调用

我完全理解HTTP世界不是单向调用的最佳选择,WebApi最适合HTTP冗长通信.毫无疑问,WCF是这里的赢家.但是,如果你已经有一个暴露了一堆动词的ApiController,在某些时候你也需要一个单向调用呢?并且您不希望为此托管/维护其他服务(WCF).

Task<HttpResponseMessage> response = client.PostAsJsonAsync<Log>("api/log", log)
Run Code Online (Sandbox Code Playgroud)

如果你没有处理响应,那么你就会得到类似于点火的东西.这是WebApi中的唯一方法还是另一种解决方案?

c# asynchronous task-parallel-library async-ctp asp.net-web-api

5
推荐指数
2
解决办法
6590
查看次数