我想尝试异步和等待,但我有一个惨败.我有方法需要异步运行两个方法(它部分工作)
public void Run()
{
Task[] tasks = new Task[2];
tasks[0] = Task.Factory.StartNew(DisplayInt);
tasks[1] = Task.Factory.StartNew(DisplayString);
//block thread until tasks end
Task.WaitAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)
并使用了两种方法
public async void DisplayInt()
{
Task<int> task = new Task<int>(
() => 10);
task.Start();
Console.WriteLine(await task);
}
public async void DisplayString()
{
Task<string> task = new Task<string>(
() => "ok" );
task.Start();
Console.WriteLine(await task);
}
Run Code Online (Sandbox Code Playgroud)
通常我得到下一个结果:1)10 ok
或2)确定10
但有时我什么都没有
如何在不使用task.Result的情况下通过等待获得异步方法的确切结果,或者它不会发生?
我上课了
public class TextCorpusFile
{
public int Id {get; set;}
public string FileType {get; set;}
public MemoryStream File {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试将文件上载到Azure Blob存储,则文件的长度等于0.(文件已创建,但长度为0)
public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
//get container by default
CloudBlobContainer textCorpusContainer =
ReturnTextCorpusFileContainer();
CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);
blockBlob.UploadFromStream(textCorpusFile.File);
}
Run Code Online (Sandbox Code Playgroud)
但是如果我按字节发送文件,它运行良好,长度不是0.
public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
//get by default
CloudBlobContainer textCorpusContainer =
ReturnTextCorpusFileContainer();
CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);
blockBlob.UploadFromByteArray(textCorpusFile.File.ToArray(),
0,
(int)textCorpusFile.File.Length);
}
Run Code Online (Sandbox Code Playgroud)
为什么它这样工作我无法理解(因为UploadFromStream(流源和我确定MemoryStream:Stream)
你可以解释吗 ?
背景:\n我有一个系统,它与保存文件元数据的数据库和保存文件的 Azure Blob 存储一起使用。数据库和 Azure Blob 存储通过 Web 服务协同工作。
\n\n为了检查系统的所有部分是否正常工作,我为下载、上传和删除文件的 Web 服务创建了单元测试。经过测试,数据库和Azure Blob存储保留了大量数据,我需要将它们全部删除。我有一个脚本可以从数据库中删除所有数据(删除一个 sql 语句中的所有表、存储过程、触发器、约束和所有依赖项)。
\n\n现在我需要编写 sctipt(power shell)或代码(C#)来从 Azure Blob 存储中删除所有文件,但我不删除容器,只删除容器中的文件。
\n\n我的问题:\n这些方法中哪一种(power shell 或 \xd0\xa1#)最好?\n如果我使用 C# 和任务(System.Threading.Tasks) 来删除文件会更快吗?
\n我想知道有一种方法可以在lambda表达式中为匿名变量实现IEqualityComparer,或者,无论如何,我需要编写类来将匿名变量转换为sprecific类并创建一个我需要实现IEqualtyComparer的类?
我编写了创建笛卡尔(Decart)生产的代码:我定义了类Decart.
public class Decart
{
public int X;
public int Y;
}
Run Code Online (Sandbox Code Playgroud)
我为Decart类定义了IEqualtityComparer
public class Ext : IEqualityComparer<Decart>
{
public bool Equals(Decart x, Decart y)
{
if ((x.X == y.X && x.Y == y.Y) ||
x.X == y.Y && x.Y == y.X)
return true;
return false;
}
public int GetHashCode(Decart obj)
{
return obj.X + obj.Y;
}
}
Run Code Online (Sandbox Code Playgroud)
我运行这段代码:
static void Main(string[] args)
{
Ext ext = new Ext();
IEnumerable<int> input = Enumerable.Range(1, 3);
var secondResult = input
.SelectMany(x …Run Code Online (Sandbox Code Playgroud) [背景]现在,我正在创建WCF,以保存和获取我们大学的文章。
我需要保存文件和这些文件的元数据。我的WCF每天需要1000人使用。该存储空间将包含约60000个aticle。
我有三种不同的方式来做。
选择哪种方式,为什么?如果您建议您自己的解决方案,那将是无足轻重的。PS他们俩都使用Azure。
azure ×3
c# ×3
async-await ×1
bytearray ×1
lambda ×1
linq ×1
sql-server ×1
storage ×1
stream ×1
wcf ×1