Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ManualResetEvent.WaitOne始终挂起在ASP.NET MVC中_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# ManualResetEvent.WaitOne始终挂起在ASP.NET MVC中

C# ManualResetEvent.WaitOne始终挂起在ASP.NET MVC中,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我使用远程云服务器来存储我的图像。如果我使用控制台来执行这些代码,它工作得很好,但在asp.net mvc中,它总是挂在“WaitOne()”上 actionresult看起来是这样的,如果我使用普通的actionresult,就会发生错误,所以我必须使用Task public Task<ActionResult> TestUpload() { var s = UploadUtil.UploadBase64("kmsfan", @"D:\\b.jpg"

我使用远程云服务器来存储我的图像。如果我使用控制台来执行这些代码,它工作得很好,但在asp.net mvc中,它总是挂在“WaitOne()”上

actionresult看起来是这样的,如果我使用普通的actionresult,就会发生错误,所以我必须使用Task

    public Task<ActionResult> TestUpload()
    {
        var s = UploadUtil.UploadBase64("kmsfan", @"D:\\b.jpg");
        return null;

    }
公共任务TestUpload()
{
var s=UploadUtil.UploadBase64(“kmsfan”,“D:\\b.jpg”);
返回null;
}

如果上载失败,您的ManualReset事件将永远不会收到信号。您应该避免在服务器环境中阻塞同步代码

使用来表示异步上载任务:

public class UploadUtil
{

    public static Task<string> UploadBase64Async(string bucket,string filelocation)
    {
       var tcs = new TaskCompletionSource<string>();
       qiniu.Config.InitFromAppConfig();

        string qiniuKey = Guid.NewGuid().ToString();

        jpegToBase64 jpeg = new jpegToBase64(filelocation);
        QiniuFile qfile = new QiniuFile(bucket, qiniuKey);
        qfile.UploadCompleted += (sender, e) => {
            var returnUrl = e.RawString;
            Console.Write(returnUrl);
            tcs.SetResult(returnUrl);    
        };
        qfile.UploadFailed += (sender, e) => {
            QiniuWebException qe = (QiniuWebException)e.Error;
            Console.WriteLine(qe.Error.ToString());
            tcs.SetException(qe);  
        };
        qfile.UploadString((int)jpeg.Filesize, "image/png", jpeg.Base64Content);
        return tcs.Task;    
    }

}
public类UploadUtil
{
公共静态任务UploadBase64Async(字符串存储桶、字符串文件位置)
{
var tcs=new TaskCompletionSource();
qiniu.Config.InitFromAppConfig();
字符串qiniuKey=Guid.NewGuid().ToString();
jpegToBase64 jpeg=新的jpegToBase64(文件位置);
QiniuFile qfile=新的QiniuFile(bucket,qiniuKey);
qfile.UploadCompleted+=(发件人,e)=>{
var returnUrl=e.RawString;
Console.Write(返回URL);
tcs.SetResult(返回URL);
};
qfile.UploadFailed+=(发送方,e)=>{
QiniuWebException qe=(QiniuWebException)e.Error;
Console.WriteLine(qe.Error.ToString());
设置异常(qe);
};
qfile.UploadString((int)jpeg.Filesize,“image/png”,jpeg.Base64Content);
返回tcs.Task;
}
}
控制器:

public async Task<string> TestUpload()
{
    var s = await UploadUtil.UploadBase64Async("kmsfan", @"D:\\b.jpg");
    return s;
}
public异步任务TestUpload()
{
var s=await UploadUtil.UploadBase64Async(“kmsfan”,@“D:\\b.jpg”);
返回s;
}

如果上载失败,您的ManualReset事件将永远不会收到信号。您应该避免在服务器环境中阻塞同步代码

使用来表示异步上载任务:

public class UploadUtil
{

    public static Task<string> UploadBase64Async(string bucket,string filelocation)
    {
       var tcs = new TaskCompletionSource<string>();
       qiniu.Config.InitFromAppConfig();

        string qiniuKey = Guid.NewGuid().ToString();

        jpegToBase64 jpeg = new jpegToBase64(filelocation);
        QiniuFile qfile = new QiniuFile(bucket, qiniuKey);
        qfile.UploadCompleted += (sender, e) => {
            var returnUrl = e.RawString;
            Console.Write(returnUrl);
            tcs.SetResult(returnUrl);    
        };
        qfile.UploadFailed += (sender, e) => {
            QiniuWebException qe = (QiniuWebException)e.Error;
            Console.WriteLine(qe.Error.ToString());
            tcs.SetException(qe);  
        };
        qfile.UploadString((int)jpeg.Filesize, "image/png", jpeg.Base64Content);
        return tcs.Task;    
    }

}
public类UploadUtil
{
公共静态任务UploadBase64Async(字符串存储桶、字符串文件位置)
{
var tcs=new TaskCompletionSource();
qiniu.Config.InitFromAppConfig();
字符串qiniuKey=Guid.NewGuid().ToString();
jpegToBase64 jpeg=新的jpegToBase64(文件位置);
QiniuFile qfile=新的QiniuFile(bucket,qiniuKey);
qfile.UploadCompleted+=(发件人,e)=>{
var returnUrl=e.RawString;
Console.Write(返回URL);
tcs.SetResult(返回URL);
};
qfile.UploadFailed+=(发送方,e)=>{
QiniuWebException qe=(QiniuWebException)e.Error;
Console.WriteLine(qe.Error.ToString());
设置异常(qe);
};
qfile.UploadString((int)jpeg.Filesize,“image/png”,jpeg.Base64Content);
返回tcs.Task;
}
}
控制器:

public async Task<string> TestUpload()
{
    var s = await UploadUtil.UploadBase64Async("kmsfan", @"D:\\b.jpg");
    return s;
}
public异步任务TestUpload()
{
var s=await UploadUtil.UploadBase64Async(“kmsfan”,@“D:\\b.jpg”);
返回s;
}


阻止代码在Web服务器上没有位置,会很快导致扩展问题。使用
TaskCompletionSource
替代MRE并等待其
Task
在这里更可取。@spender您好,您能给我看一下代码吗?因为我不熟悉您的解释。您正在阻止同步上下文,从而导致死锁,请使用
async wait
进行MVC调用,这不会导致死锁控制器中的方法不是异步的,不应返回任务。。。无效返回类型。阻止代码在Web服务器上没有位置,并且会很快导致扩展问题。使用
TaskCompletionSource
替代MRE并等待其
Task
在这里更可取。@spender您好,您能给我看一下代码吗?因为我不熟悉您的解释。您正在阻止同步上下文,从而导致死锁,请使用
async wait
进行MVC调用,这不会导致死锁控制器中的方法不是异步的,不应返回任务。。。无效返回类型。您没有异步版本的
UploadCompleted
事件吗,这将使implement@Guillaume从.Net 4.5开始,Task.FromResult将不再是
Task.FromResult
,这是一个比
TaskCompletionSource
更好的选择,我认为Task.FromResult在这里不起作用。Task.FromRresult在您已经获得结果(同步)时非常有用,这里的任务是异步的。我已经检查过它确实可以使用
Task.FromResult
Task.FromException
直接替换,这是从.Net 4.5开始引入的,比
TaskCompletionSource
更有效,就像模拟异步API一样,这也是不正确的-
var tcs=new TaskCompletionSource()
,导致编译问题,应该是
var tcs=new TaskCompletionSource()
您没有异步版本的
UploadCompleted
事件吗,这将使它更简单implement@Guillaume从.Net 4.5开始,Task.FromResult将不再是
Task.FromResult
,这是一个比
TaskCompletionSource
更好的选择,我认为Task.FromResult在这里不起作用。Task.FromRresult在您已经获得结果(同步)时非常有用,这里的任务是异步的。我已经检查过它确实可以使用
Task.FromResult
Task.FromException
直接替换,这是从.Net 4.5开始引入的,比
TaskCompletionSource
更有效,就像模拟异步API一样,这也是不正确的-
var tcs=new TaskCompletionSource()
,导致编译问题,应该是
var tcs=new TaskCompletionSource()