我在ASP.NET应用程序中有一个方法,需要花费很多时间才能完成.在一个用户请求期间,对此方法的调用最多可能发生3次,具体取决于用户提供的缓存状态和参数.每次通话大约需要1-2秒才能完成.该方法本身是对服务的同步调用,并且不可能覆盖实现.
因此,对服务的同步调用类似于以下内容:
public OutputModel Calculate(InputModel input)
{
// do some stuff
return Service.LongRunningCall(input);
}
Run Code Online (Sandbox Code Playgroud)
并且该方法的用法是(注意,方法调用可能不止一次):
private void MakeRequest()
{
// a lot of other stuff: preparing requests, sending/processing other requests, etc.
var myOutput = Calculate(myInput);
// stuff again
}
Run Code Online (Sandbox Code Playgroud)
我尝试从我这边改变实现以同时提供这种方法的工作,这就是我到目前为止所做的.
public async Task<OutputModel> CalculateAsync(InputModel input)
{
return await Task.Run(() =>
{
return Calculate(input);
});
}
Run Code Online (Sandbox Code Playgroud)
用法("do do stuff"代码的一部分与服务调用同时运行):
private async Task MakeRequest()
{
// do some stuff
var task = CalculateAsync(myInput);
// do other stuff
var myOutput = await task; …Run Code Online (Sandbox Code Playgroud) 如何检查UNC路径是否可用?我有一个问题,如果共享不可用,检查大约需要半分钟:
var fi = new DirectoryInfo(@"\\hostname\samba-sharename\directory");
if (fi.Exists)
//...
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来检查文件夹是否可用?我正在使用Windows XP和C#.
我有异常处理和并行任务的问题.
下面显示的代码启动2个任务并等待它们完成.我的问题是,如果任务抛出异常,则永远不会到达catch处理程序.
List<Task> tasks = new List<Task>();
try
{
tasks.Add(Task.Factory.StartNew(TaskMethod1));
tasks.Add(Task.Factory.StartNew(TaskMethod2));
var arr = tasks.ToArray();
Task.WaitAll(arr);
}
catch (AggregateException e)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下代码等待超时的任务时,会捕获异常.
while(!Task.WaitAll(arr,100));
Run Code Online (Sandbox Code Playgroud)
我似乎错过了一些东西,因为文档WaitAll描述了我的第一次尝试是正确的.请帮助我理解它为什么不起作用.
winphone 7 Panorama和Pivot Controls之间有什么区别?对我来说,它们看起来非常相似,除了略有不同的视觉外观.在哪种情况下应该使用其中一种?
是否可以在字符串格式说明符中添加一些描述性文本?
例:
string.Format ("{0:ForeName} is not at home", person.ForeName);
Run Code Online (Sandbox Code Playgroud)
在示例ForeName中添加了描述.
上面的语法显然是不正确的,但只是为了表明这个想法.
我问的原因是因为在我的情况下字符串是在资源文件中,所以在你目前只看到的资源文件中
{0} is not at home
Run Code Online (Sandbox Code Playgroud)
在某些情况下,很难掌握其背景{0}.
编辑:
在c#6中$引入了与运算符的字符串插值,因此string.Format不再需要:
$"{person.ForeName} is not at home";
Run Code Online (Sandbox Code Playgroud) 自从我升级到Visual Studio 2017 15.3.0后,我的xamarin android应用程序不断打印以下调试输出:
08-15 09:13:23.275 D/Mono ( 3119): [0x9a5be930] worker unparking, timeout? no interrupted? no
08-15 09:13:23.275 D/Mono ( 3119): [0x9a5be930] worker parking
08-15 09:13:23.275 D/Mono ( 3119): [0x9a6bf930] worker unparking, timeout? no interrupted? no
08-15 09:13:23.275 D/Mono ( 3119): [0x9a6bf930] worker parking
08-15 09:13:24.275 D/Mono ( 3119): [0x9a87d930] worker unparking, timeout? no interrupted? no
08-15 09:13:24.276 D/Mono ( 3119): [0x9a87d930] worker parking
Run Code Online (Sandbox Code Playgroud)
输出相当规律,每秒几次.
它意味着什么以及可能导致什么?
我一直在尝试在我的Xamarin android proyect中使用Realm,其中一个依赖是Fody,每次我尝试运行我的应用程序时都会显示以下错误:错误MSB4044:"Fody.WeavingTask"任务没有给出一个值必需参数"SolutionDir".
我一直在寻找修复,但找不到它,你知道如何赋予它一个价值吗?它在哪里?
对于领域块包我已经创建了FodyWeavers.xml
我使用以下代码显示来自网络服务器的图像:
<Image Source="{Binding Url}" />
Run Code Online (Sandbox Code Playgroud)
图像会自动下载,我假设还有一些基于Url的缓存.
我的问题是,当应用程序处于脱机状态时,可能无法显示缓存的图像.
有没有办法改变缓存行为,以便在没有网络可用时加载图像?有关缓存的文档指针也非常有用.
当我在VS2012中成功运行单元测试时出现以下错误:
由于没有正在进行的测试运行,因此无法取消测试运行
该错误仅在单元测试成功后出现(在visual studio中进行绿色检查).
为什么我会收到此错误?
我正在尝试在测试中使用带有异步方法的reactiveui测试调度程序.
等待异步调用时,测试挂起.
根本原因似乎是异步方法中等待的命令.
[Fact]
public async Task Test()
=> await new TestScheduler().With(async scheduler =>
{
await SomeAsyncMethod();
// *** execution never gets here
Debugger.Break();
});
private async Task SomeAsyncMethod()
{
var command = ReactiveCommand.CreateFromTask(async () =>
{
await Task.Delay(100);
});
// *** this hangs
await command.Execute();
}
Run Code Online (Sandbox Code Playgroud)
如何与没有死锁的测试调度程序一起执行异步调用?
我正在使用reactiveui 9.4.1
编辑:
我已经尝试了WithAsync()Funks答案中建议的方法,但行为是一样的.
c# ×8
xamarin ×2
.net ×1
android ×1
asp.net ×1
async-await ×1
asynchronous ×1
c#-5.0 ×1
fody ×1
mono ×1
reactiveui ×1
realm ×1
unc ×1